【问题标题】:How to port Rails Rake task output called via cron task to Rails production server output?如何将通过 cron 任务调用的 Rails Rake 任务输出移植到 Rails 生产服务器输出?
【发布时间】:2020-04-21 20:00:49
【问题描述】:

我在 crontab 中有一系列 cron 作业。 cron 作业通过以下格式调用 Rake 任务:

* * * * * /bin/sh -l -c 'cd /app && bundle exec rake foo:bar[baz] >> /var/log/foobar_sync.log 2>&1'

我以为我正在通过 2>&1 将他们的输出(通过 puts)重定向到 STDOUT,但我想我处理的问题不正确。

如何将这些 Rake 任务的输出以及 Rails 服务器日志本身重定向到 Rails 服务器日志输出,以便在 Rails 服务器输出旁边看到它们的输出?

【问题讨论】:

  • rake 任务是否使用Rails.logger 命令?
  • @nathanvda rake 任务使用puts,我假设它默认为环境设置的 Rails.logger。
  • 不。 puts 只是输出到控制台(又名 STDOUT),在您的情况下,您似乎更愿意使用 Rails.logger 代替?大多数时候,在我的 rake 文件中,我添加了一个同时执行这两种操作的方法(或检查标志,以便我可以选择,因为在手动运行时,我更喜欢查看 puts 而不是拖尾我的 rails 日志,但选择你的风格)。
  • 您的 Rails 实例记录到 STDOUT 了吗?因此,当您的意思是“Rails 服务器日志输出”时,您实际上希望一个进程的标准输出与另一个进程的标准输出连接/加入? Afaik 那是不可能的,但我不确定。也许您应该改写您的问题以使其更加明显。记录到文件是不可能的吗?因为让多个进程登录同一个文件(显然)更容易。
  • 也许是从arask 调用它?它将在“内部”rails 中运行代码。

标签: ruby-on-rails unix logging cron stdout


【解决方案1】:

由于操作系统架构的简单性,我确定没有办法(也许除了破解 Linux)将 Rake 任务的 STDOUT 集成到 Rails 服务器的 STDOUT 中。

我通过执行以下操作解决了我的问题:

  1. 在 Rails 控制器中调用 Rake 任务的目标方法。
  2. 通过 Rails 路由调用 Rails 控制器的方法。
  3. 通过 crontab 中的 curl 调用 Rails 路由。

现在,方法的输出(在我的例子中,是我为其创建 ActiveJob 的同步任务)在 Rails 服务器的 STDOUT 中可见。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 2018-12-15
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多