2010-09-04 170 views
1

我想用耙子後臺任務在軌這樣耙後臺任務無法運行

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

這是在發展環境好,但也不會在生產模式下工作。

我用來記錄檢查命令字符串是否產生好不好,但似乎每一個事情是在生產環境現狀罰款:

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 & 

任何機構擁有約爲什麼不能生產工作任何想法模式?

謝謝

回答

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寶石。

+0

更多免費諮詢,resque寶石。 – 2011-11-23 16:56:20