在rails应用程序中运行rake任务

我想在rails应用程序中运行资产预编译任务,因为我有许多依赖项将更改代码,在这种情况下,无论何时更改我需要运行脚本,因为我无法让服务器访问它们所以我提供从他们自己的GUI可以运行脚本,所以,我已经构建了UI来运行任务与一些参数,如

system("Template='#{params[:template]}' Theme='#{params[:theme]}' rake assets:precompile) 

我从UI获取了两个值(params [:template],params [:theme])。我想在另一个路径(站点路径)中运行此任务的另一个意思是管理端UI是那个任务应该在Site目录中执行,

  if(params[:theme_script] == "true") template=Template.where(:name => params[:template]).first if template theme = template.themes.where(:name => params[:theme]).first if theme # Dir.chdir "#{THEMEPATH}"do # `Template="#{template.name}" Theme="#{theme.name}" rake assets:precompile` # end # sleep 10 # system("#{Rails.root.to_s}/lib/shell_script.sh") # RunRake.run_rake(template.name,theme.name) # Dir.chdir "#{THEMEPATH}"do # Rake::Task['assets:precompile'].invoke # end ENV["Template"] = template.name ENV["Theme"] = theme.name precompile_task = "bundle exec rake assets:precompile --trace 2>&1" output = Dir.chdir(THEMEPATH) { %x[ #{precompile_task} ] } flash[:notice] = "Asset created successfully" else flash[:notice] = "U have enter invalid data" end else flash[:notice] = "U have enter invalid data" end end 

这是我的代码我正在检查多个条件并允许执行任务。

我已经通过放入控制器和lib来尝试此代码,但这不起作用。

我也试过shell脚本。

可以请任何人都可以帮助我。

您可以为rails设置环境变量,然后从控制器发出#invoke方法。 所以,准备文件:

的Gemfile

 gem 'rake' 

配置/初始化/ rake.rb:

 Rake.load_rakefile Rails.root.join( 'Rakefile' ) 

应用程序/控制器/ your_controller:

 ENV["Template"] = template.name ENV["Theme"] = theme.name Rake::Task[ 'assets:precompile' ].invoke 

发出bundle install ,然后运行console rails c ,然后键入:

 Rake::Task.tasks.map(&:name).grep 'assets:precompile' # => ["assets:precompile"] 

如您所见,任务assets:precompile已成功加载。 然后只需为控制器发出操作。

要运行其他rails应用程序的任务,你shell也运行另一个ruby实例,类似于你所做的:

 system( "other_app_run.sh '#{template.name}' '${theme.name}'" ) 

other_app_run.sh:

 #!/bin/bash source "$HOME/.rvm/scripts/rvm" cd /other/app/path export Template="$1" export Theme="$2" rake assets:precompile