我们使用 EngineYard App Cloud 托管我们的 Ruby on Rails 应用程序,这对我们来说非常有效。它们提供了一系列类似于 Capistrano 回调的部署回调(before_restart、after_restart 等)。
我们的应用程序中有一系列 Rake 任务,用于维护应用程序的各个部分。如果我们向数据库中添加新的业务规则,我们可能需要重新加载用户关联的业务规则等。
这些任务没有硬性或快速的时间表,但我们也不希望在每次部署时都运行每一项任务,因为它们会减慢部署过程。
是否有任何系统允许我们定义要在下一次部署时运行的任务,有点像迁移。我心目中的理想系统将按如下方式工作:
- 我们意识到在下一次部署时,需要运行一个任务
- 我们通过系统安排任务
- 在下一次部署时,系统会看到部署后任务列表——它注意到最近的任务尚未在特定服务器上运行(就像迁移在运行时如何标记数据库一样只有最近的、未运行的迁移被触发)——新任务被触发
关于安排这些部署后任务并启动它们(除非它们已经在服务器上运行)的最佳做法有什么建议吗?
谢谢!
最佳答案
试试 after_party ruby gem 以 db:migrate 的基本操作为模型,但用于部署后任务。部署后(rake)任务是用这样的名称创建的
lib/tasks/deployment/20130130215258_task_name.rake
您当然可以从 rake 任务中调用任何 ruby 代码。文档说它支持同步和异步任务(异步任务是长时间运行的任务,您可以在应用程序启动时在后台进行这些任务)
我没有使用过它,但我打算试一试,因为我们的要求与您描述的类似。
关于ruby-on-rails - Ruby/Rails - 运行部署后任务的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3668092/