gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:33:46 25 4
gpt4 key购买 nike

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

我意识到这会导致我们的应用程序服务器 b/c 出现问题,运行器作业保存在某些文件日志句柄(production.log 等)上,然后夜间 log​​rotate 作业失败。这会导致磁盘空间填满等。

运行器作业调用 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

您的环境文件将是:
config/environments/production.rb

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

因此,您可以定义自己的自定义环境文件:
config/environments/my_custom_environment.rb

这是对生产环境文件的完整克隆,除了日志级别。您还需要为 my_custom_environment 数据库添加一个 database.yml 条目,与您的生产 database.yml 条目相同。在 Internet 上搜索有关如何在 Rails 中设置您自己的环境的更多详细信息。

最后,与其在生产环境中运行运行脚本,不如在 my_custom_environment 中运行它。

嗯,这不是这个问题的完美解决方案(我想必须有一些更有效和更干燥的方法来做到这一点),但如果没有任何效果,这是您可以尝试的解决方法。

希望能帮助到你 :)

关于ruby-on-rails - rails runner 作业不释放文件日志句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26123857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com