rails runner作业不释放文件日志句柄

时间:2014-09-30 14:52:23

标签: ruby-on-rails cron

我正在运行一个rails runner工作,根据数据库内容发送一些电子邮件。这项工作每四个小时通过cron运行一次。

我意识到这会导致我们的应用服务器b / c出现问题,转轮作业会保留在某些文件日志句柄(production.log等)上,然后每晚的logrotate作业就会失败。这会导致磁盘空间填满等等。

runner作业调用Rails生产环境,执行几个ActiveRecord查询,通过ActionMailer发送电子邮件,然后退出。我没有明确地对日志做任何事情。

我可以在转轮脚本中做些什么来释放日志句柄,或完全禁用日志记录(宁愿不做后者)?我应该正式杀死生产Rails运行程序吗?脚本刚刚结束......但有时我们会在作业运行后在流程列表中看到这样的项目:

4 S 1000 12008 12002 0 80 0 - 127507 futex_ Sep29? 00:00:32 ruby​​ / path / to / my / app / rails runner -e production require' delayed / command&#39 ;; Delayed :: Worker.before_fork; Delayed :: Command.new([])。运行

1 个答案:

答案 0 :(得分:0)

您需要做的就是更改环境文件的日志级别。

config.log_level = :fatal

您的环境文件将是:

config/environments/production.rb

但是,您希望它在生产环境中运行,这样做会在生产中几乎完全关闭日志。 (我知道你不想要这个)

因此,您可以定义自己的自定义环境文件:

config/environments/my_custom_environment.rb

除了日志级别之外,它是生产环境文件的完整克隆。此外,您还需要为my_custom_environment数据库添加database.yml条目,与生成database.yml条目相同。在互联网上搜索如何在rails中设置您自己的环境以获取更多详细信息。

然后最后,您应该在my_custom_environment中运行它,而不是在生产环境中运行您的跑步者脚本。

嗯,这不是解决这个问题的完美解决方案(我想必须有更高效和干燥的方法),但如果没有任何效果,这就是你可以尝试的解决方法。

希望有所帮助:)