我一直在使用Capistrano将多个rails应用程序部署到单个EC2实例。这些应用程序都使用Apache + Passenger。其中大部分的部署阶段如下:
- 获取代码,在主应用目录的“releases / [timestamp]”子目录中暂存。
- 运行bundler for staged release
- 运行分阶段发布的迁移
- 运行资产编译(“assets:precompile”)rake任务以进行分阶段发布
- 重新启动delayed_job任务队列处理守护程序和任何其他后台进程
- 将分阶段发布符号链接到“当前”(乘客网络根目录)
- 重启乘客(通过触摸app目录中的“tmp / restart”)
这是一个非常标准的Rails部署过程。我注意到它的一个巨大瓶颈是为每个需要它的任务加载rails环境。对于我的一个较大的应用程序,环境加载需要大约40秒或更长时间,并且对于需要rails环境的n个任务(运行bundler,迁移,资产编译,delayed_job守护程序)重复n次。请原谅这是一个天真的问题,但我想知道是否有一种简单的方法只为所有这些任务加载环境一次(最好比将所有这些任务/作业的实现合并到一个加载的单个rake任务更容易环境)。
答案 0 :(得分:0)
答案 1 :(得分:0)
更新:我最终为此编制了我自己的解决方案,效果很好。我没有从shell中单独运行依赖于rails环境的每个命令(使用Capistrano“run”方法),而是将它们捆绑在一起,形成一个依赖于rails环境的rake任务。我之前运行过“rake db:migrate”,然后“rake assets:precompile”等,我现在运行一个rake任务,其主体包括“Rake :: Task ['db:migrate']。invoke”和“Rake” ::任务[ '资产:预编译']。调用”。环境现在只加载一次。