自动重启Rails应用程序并运行Rake任务

时间:2014-12-23 23:48:55

标签: ruby-on-rails ruby sqlite rake rake-task

我有一个Rails应用程序,它从各种内部API和商店中提取信息到本地SQLite DB中。我的rails应用程序基本上是从多个API中提取的数据之上的美化UI。

由于超出此问题范围的原因,通过重新查询API来定期更新数据库中的信息并不简单。我基本上被迫从头开始重新创建数据库。

本质上我想每隔X小时做一次这样的事情 -

  1. 自动关闭导轨应用程序
  2. 张贴维护页面(“抱歉,我们会在几分钟内回来”)
  3. 删除数据库,重新创建数据库并重新迁移它(rake db:drop; rake db:create; rake db:migrate
  4. 运行我的自定义rake任务,再次填充表格(rake myApp:update
  5. 重新启动应用程序
  6. 这提出了一些问题

    1. 如何让应用每X小时自动重启一次?我应该使用cron作业在外部安排这个吗?我能做到这一点吗?
    2. 如果应用关闭,如何显示维护页面?同样,这也是我需要管理的外部重新指导吗?
    3. 最重要的是,有没有一种方法可以删除表并重新创建它们,还是应该使用rake任务?有没有办法在初创公司调用rake任务?我想我可以在.rb下创建一个config/initalizers进程,该进程会在启动时运行(但仅限于Rails.env == 'production'时)?
    4. 感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

  1. 每隔一段时间就没有“rails way”来重新加载rails应用程序,因为启动和停止rails应用程序应用程序本身的上下文之外。 cron工作是一个很好的方法。
  2. 通常,网络服务器在rails app“前面”运行,apache或nginix很常见。维护页面需要在该级别上实现(因为rails应用程序已经关闭了一段时间),类似于临时更改配置和重新加载应该就足够了。然后,当将该应用程序重新联机时,将配置恢复为指向rails应用程序并重新加载。
  3. 使用你拥有的rake任务很好,设置环境变量RAILS_ENV=production,以便它们点击正确的sqlitedb文件。不要试图在rails启动时调用rake任务,从你的cron作业调用的脚本中调用它们,然后启动应用程序。

答案 1 :(得分:1)

  1. 只需创建一个定期运行的Cron任务。 Cron任务启动一个shell stript,它只执行你手动运行的所有步骤。

  2. 维护页面有一个gem(https://github.com/biola/turnout)。它提供了rake maintenance:startrake maintenance:end等rake任务。

  3. 我认为没有必要删除表格。通常它应该足以删除所有记录,然后创建新记录。如果您真的必须删除数据库,那么从结构转储中恢复数据库模式可能会更快。