【发布时间】:2014-01-30 12:27:32
【问题描述】:
我想在 Rails 应用程序中运行资产预编译任务,因为我有许多依赖项会更改代码,在这种情况下,每当它们更改时我都需要运行脚本,因为我无法让服务器访问它们所以我为他们提供了 GUI,因为他们可以单独运行脚本,所以,我已经构建了 UI 来运行带有一些参数的任务,例如
system("Template='#{params[:template]}' Theme='#{params[:theme]}' rake assets:precompile)
我从 UI (params[:template],params[:theme]) 获得两个值。我想在另一个路径(站点路径)中运行此任务的另一件事意味着管理端 UI 是否存在该任务应该在其中执行网站目录,
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
这是我的代码正在检查多个条件并允许执行任务。
我已经通过放入控制器和库来尝试此代码,但这不起作用。
我也尝试过使用 shell 脚本。
请任何人都可以帮助我。
【问题讨论】:
-
这真的不是资产编译的用途。您应该在部署时通过构建脚本自动执行此操作,而不是手动执行此操作。您应该没有理由为此需要 GUI。
-
感谢您的回复,因为我有很多依赖项会更改代码,在这种情况下,每当他们更改时,我都需要运行脚本,因为我无法让服务器访问它们,所以我为他们提供 GUI,他们可以单独运行脚本。
-
@МалъСкрылевъ 请帮助我如何传递参数?
标签: ruby-on-rails ruby ruby-on-rails-3.1 asset-pipeline rake-task