-1

我使用Clockwork gem 在使用 Heroku 部署的 Rails 应用程序上安排作业。

clock.rb对于不熟悉的人,它基本上是从您的应用程序根目录中的文件中读取的。

# config.rb

# Schedule every Monday @ 13:00 UTC
every(1.week, "some description", at: "Monday 13:00", tz: "UTC"){
  `rake clock_tasks:my_task`
}

...并且有一个专用的 Dyno 运行时钟过程。

# Procfile
...
clock: bundle exec clockwork clock.rb
...

那么如果我不想对时钟文件进行硬编码怎么办?我希望能够clock.rb在应用程序启动时动态生成使用 ERB。这使我可以灵活地根据环境配置等来安排或不安排某些任务......

  1. Heroku 是否允许您在任何时候将文件“写入”到本地文件系统,以便我可以clock.rb在初始化步骤中生成和写入文件?

  2. 有没有办法在bundle exec我创建clock.rb文件之后延迟使用命令启动测功机的执行?我可以从一个假/空文件开始,然后在初始化期间填充一个新文件,但我仍然需要一种方法让时钟通过重新启动bundle exec clockwork...命令来重新拾取它。

任何其他创造性的解决方案表示赞赏。

谢谢!

4

1 回答 1

1

config.rb只是鲁比。不需要ERB,简单的 Ruby 与ENV变量结合应该足以解决您的问题:

# Schedule every `ENV['schedule_time']` (with fallback if empty)
schedule_time = ENV['schedule_time'].presence || 'Monday 13:00'
every(1.week, "some description", at: schedule_time, tz: "UTC") {
  `rake clock_tasks:my_task`
}

或者你可以这样写:

if ENV[`foo`]
  # config bar
else
  # config baz
end

您可能需要阅读Configuration 和 Config Vars以了解如何在 Heroku 上设置和读取环境变量。

于 2015-10-11T06:33:38.363 回答