【问题标题】:understanding Rails initialization when we execute rake db:migrate当我们执行 rake db:migrate 时理解 Rails 初始化
【发布时间】:2013-10-02 17:32:45
【问题描述】:

我想知道我正在执行什么命令。对于大多数命令,例如 rake db:migrate, rake db:setup, rails console, rails server,都会执行 rails 初始化程序。

这个问题的原因是我在 Rails 初始化期间开始使用 Rufus-scheduler 调度一些作业。不幸的是,所有这些初始化程序都在执行 rails console 或 rake db:migrate 时被执行。我只想在执行rails server 时安排作业。

您的帮助将不胜感激。谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    当我只想在运行服务器时安排作业时,以下命令有助于了解我们正在运行服务器。

    defined?(Rails::Server)
    

    这解决了问题。

    【讨论】:

      【解决方案2】:

      您提到的 rake 任务以及大多数与 Rails 相关的任务都依赖于environment rake 任务。此 rake 任务加载 config/environment.rb,它需要 config/application.rb,而这又需要您的应用程序所需的每个文件和依赖项,包括 config/initializers/ 下的初始化程序。

      如果你有不应该包含在这个依赖图中的东西,它们可能不属于初始化程序。

      拥有“后台工作人员”的一种常见方法是拥有一个单独的 rake 任务并使用诸如 foreman 之类的库,该库将读取 Procfile 来启动多个进程。

      一个例子:

      app: rails server
      workers: rake jobs:work
      

      【讨论】:

      • 我还需要通过 Rails UI 管理那些预定的作业,如果我从 Foreman 开始,我将无法控制其他进程,我的意思是重新安排作业。
      • 这并不是Rails 非常擅长的。如果您需要类似的东西,我建议您使用 heroku 的调度程序。
      • 无论如何,您的 Rails UI 可以设置一个时间戳,我们称之为 next_run_at,您的工作人员可以知道要检查它,并且在它出现之前不做任何事情。
      • 谢谢迦勒。我们在 AWS 而不是 Heroku 上部署我们的应用程序。 ClockWork 似乎是一个不错的解决方案,但是我们再次需要从数据库中读取记录并安排 Rails 启动的时间。我们很可能会通过第一次单击按钮来手动安排它。
      • 我的回答是否满足您的实际问题?您似乎试图了解 rake 任务的工作原理,而不是专门询问您的日程安排。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2016-03-08
      相关资源
      最近更新 更多