tim*_*gut 5 cron ruby-on-rails
我正在运行一个 rails runner 作业,它根据数据库内容发送一些电子邮件。该作业每四小时通过 cron 运行一次。
我意识到这会导致我们的应用程序服务器 b/c 出现问题,运行器作业持有一些文件日志句柄(production.log 等),然后每晚 logrotate 作业失败。这会导致磁盘空间填满等。
运行器作业调用 Rails 生产环境,执行几个 ActiveRecord 查询,通过 ActionMailer 发送电子邮件,然后退出。我没有明确地对日志做任何事情。
我可以在 runner 脚本中做些什么来释放日志句柄,或者完全禁用日志记录(宁愿不做后者)?我应该正式终止生产 Rails runner 进程吗?脚本刚刚结束......但有时我们会在作业运行后在我们的进程列表中看到这样的项目:
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';Delayed::Worker.before_fork;Delayed::Command.new([]).run
您需要做的就是更改环境文件的日志级别。
config.log_level = :fatal
Run Code Online (Sandbox Code Playgroud)
您的环境文件将是:
config/environments/production.rb
Run Code Online (Sandbox Code Playgroud)
但是,您希望它在生产环境中运行,这样做会几乎完全关闭生产中的日志。(我知道你不会想要这个)
因此,您可以定义自己的自定义环境文件,例如:
config/environments/my_custom_environment.rb
Run Code Online (Sandbox Code Playgroud)
这是对生产环境文件(日志级别除外)的完整克隆。此外,您还需要为 my_custom_environment 数据库添加一个database.yml 条目,与您的生产database.yml 条目相同。在互联网上搜索如何在 Rails 中设置您自己的环境以获取更多详细信息。
最后,您应该在 my_custom_environment 中运行它,而不是在生产环境中运行您的运行器脚本。
好吧,这不是这个问题的完美解决方案(我想一定有一些更有效和干的方法来做到这一点),但如果没有解决问题,这是您可以尝试的解决方法。
希望能帮助到你 :)