我们在项目中使用delayed_job的命名队列。有没有办法将每个队列记录到单独的日志文件中?
在部署脚本中启动了DelayedJob,如下所示:
run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 1 --queue=fast start"
run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 2 start"
我想要实现的是fast
队列中运行的所有内容都会登录到log/delayed_job.fast.production.log
,而另一个队列中的所有内容都会登录到log/delayaed_job.production.log
。
答案 0 :(得分:3)
不幸的是,jvperrin的答案没有帮助。我们设法做的是在初始化程序中设置所需的日志文件:
Delayed::Worker.logger = ActiveSupport::BufferedLogger.new("log/delayed_job.#{Rails.env}.log", Rails.logger.level)
if caller.last =~ /script\/delayed_job/
queues = ARGV.select { |opt| opt =~ /--queue=/ }
queue = /\=(.*)/.match(queues.first) if queues
queue = $1 if queue
if queue
Delayed::Worker.logger = ActiveSupport::BufferedLogger.new("log/delayed_job.#{queue}.#{Rails.env}.log", Rails.logger.level)
end
ActiveRecord::Base.logger = Delayed::Worker.logger
Rails.logger = Delayed::Worker.logger
end
答案 1 :(得分:1)
尝试使用以下两个命令添加替换部署脚本中的两个命令:
run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 1 --queue=fast start >> ./log/delayed_job.fast.production.log 2>&1"
run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 2 start >> ./log/delayed_job.production.log 2>&1"
我将>> ./log/delayed_job.fast.production.log 2>&1
添加到第一个命令的末尾,将>> ./log/delayed_job.production.log 2>&1
添加到第二个命令的末尾。这些添加的部分将获取delayed_job命令的输出,并将stdout和stderr重定向到每个日志文件。输出可能不会立即写入文件,可能是因为存在某种用于文件写入的缓冲区。
如果您希望输出也继续显示在屏幕上以及记录到文件中,那么您可以使用tee
命令:
run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 1 --queue=fast start | tee -a ./log/delayed_job.fast.production.log 2>&1"
run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 2 start | tee -a ./log/delayed_job.production.log 2>&1"
答案 2 :(得分:0)
在最新的Rails版本中使用(基于Paul Nosoff的回答):
app-home ion-content {
--background: pink;
}