Rails 在 Heroku 上部署期间动态生成时钟文件(或任何文件)
Dynamically generating a clock file (or any file) during Rails deployment on Heroku
我使用 Clockwork gem 来安排我的 Rails 部署在 Heroku 上的应用程序的作业。
对于不熟悉的人,它基本上是从应用程序根目录中的 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
...
如果我不想对时钟文件进行硬编码怎么办?我希望能够在应用程序启动时使用 ERB 动态生成 clock.rb
。这使我可以根据环境配置等灵活地安排或不安排某些任务...
Heroku 是否允许您在任何时候 "write" 一个文件到您的本地文件系统,以便我可以在初始化步骤中生成并写入 clock.rb
文件?
有没有办法延迟使用 bundle exec
命令启动 dyno 的执行,直到我创建了 clock.rb
文件?我可以从一个 fake/empty 文件开始,然后在初始化期间填充一个新文件,但我仍然需要一种方法让时钟通过重新启动 bundle exec clockwork...
命令来再次拾取它。
感谢任何其他有创意的解决方案。
谢谢!
你config.rb
只是Ruby。不需要 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 and Config Vars 了解如何在 Heroku 上设置和读取环境变量。
我使用 Clockwork gem 来安排我的 Rails 部署在 Heroku 上的应用程序的作业。
对于不熟悉的人,它基本上是从应用程序根目录中的 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
...
如果我不想对时钟文件进行硬编码怎么办?我希望能够在应用程序启动时使用 ERB 动态生成 clock.rb
。这使我可以根据环境配置等灵活地安排或不安排某些任务...
Heroku 是否允许您在任何时候 "write" 一个文件到您的本地文件系统,以便我可以在初始化步骤中生成并写入
clock.rb
文件?有没有办法延迟使用
bundle exec
命令启动 dyno 的执行,直到我创建了clock.rb
文件?我可以从一个 fake/empty 文件开始,然后在初始化期间填充一个新文件,但我仍然需要一种方法让时钟通过重新启动bundle exec clockwork...
命令来再次拾取它。
感谢任何其他有创意的解决方案。
谢谢!
你config.rb
只是Ruby。不需要 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 and Config Vars 了解如何在 Heroku 上设置和读取环境变量。