rake后台任务无法运行

时间:2010-09-04 04:45:17

标签: ruby-on-rails ruby background rake

我想在像这样的轨道中使用rake后台任务

system("cd #{Rails.root} && RAILS_ENV=#{Rails.env} rake abc:def --trace 2>&1 >> #{Rails.root}/log/rake.log &")

这在开发环境中没问题,但在生产模式下无效。

我使用logger检查命令字符串是否生成正常,但似乎生产环境中的每件事情都很好:

cd /home/username/rails_staging/Abc/releases/20100904034630 && RAILS_ENV=production rake abc:def --trace 2>&1 >> /home/username/rails_staging/Abc/releases/20100904034630/log/rake.log &

任何机构都有任何关于为什么在生产模式下无效的想法?

由于

1 个答案:

答案 0 :(得分:0)

这是我的测试设置来复制你的问题。

# lib/tasks/whatever.rake
namespace :abc do
  task :def do
    puts "DEF ran in #{Rails.env} mode in the directory #{Rails.root}."
  end
end

$ rake abc:def
DEF ran in development mode in the directory /tmp/boluapp

$ RAILS_ENV=production rake abc:def
DEF ran in production mode in the directory /tmp/bobluapp.

它会运行。它只是没有去日志。您可以在生产模式下运行的rails console中看到它运行。

>> system("cd #{Rails.root} && RAILS_ENV=#{Rails.env} rake abc:def --trace 2>&1 /tmp/rake.log")
** Invoke abc:def (first_time)
** Execute abc:def
DEF ran in production mode in the directory /tmp/boluapp.

Rake禁用生产模式下的登录。所以创建一个新的。

# lib/tasks/whatever.rb
namespace :abc do
  task :def do
    logger = Logger.new("#{Rails.root}/log/rake.log")
    logger.level = Logger::INFO
    logger.info "DEF ran in #{Rails.env} mode in the directory #{Rails.root}."
  end
end

$ RAILS_ENV=production rake abc:def
$ cat log/rake.log
# Logfile created on 2011-11-23 00:00:00 -0500 by logger.rb/31641
DEF ran in production mode in the directory /tmp/boluapp.

作为您可能不想要的免费建议的旁注,这是运行后台作业的一种不好的方法。看看delayed_job gem。