Rails-在 Rails 服务器启动时执行一次性任务的方式

Rails-way to execute one-off task on Rails server startup

我有 Rails 4.2 应用程序,我想在服务器启动时执行一些一次性代码。

我的第一个方法是在 config/initializers 到 运行 代码中使用初始化程序。但在这种情况下,代码也会针对所有 rake 任务和 Sidekiq 进程执行。

所以我为 运行 我的代码创建了一个 rake 任务。现在我想知道如何在 rails 服务器启动时执行它。当然,我可以创建一个 shell 脚本来执行我的 rake 任务,然后启动服务器。但是有什么 rails 方法可以做到这一点吗?

Foreman is another approach advised SO,但它对我不起作用,因为我的任务不是守护进程,并且该进程在完成后立即终止。显然 Procfile 中的所有进程都必须被守护进程。

可以通过 运行 在与守护任务相同的进程中使用 Foreman 实现(例如 rails server)。

如果一次性任务是rake lego:update_all

则对应的Procfile为

web: rake lego:update_all && rails s
sidekiq: bundle exec sidekiq