簡體   English   中英

耙后台任務無法運行

[英]rake background task can not run

我想在Rails中使用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 &

任何機構都對為什么它不能在生產模式下起作用有任何想法?

謝謝

這是我的測試設置,用於復制您的問題。

# 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.

作為您可能不想要的免費建議的補充說明,這是運行后台作業的一種不好的方法。 看一下delay_job的寶石。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM