我一直在使用 Capistrano 将多个 Rails 应用程序部署到单个 EC2 实例。这些应用程序都由 Apache + Passenger 提供。其中大部分的部署阶段如下:
-- 获取代码,暂存于主应用程序目录的“releases/[timestamp]”子目录中。
-- 运行打包器进行分阶段发布
-- 为分阶段发布运行迁移
-- 运行资产编译 ("assets:precompile") 分阶段发布的 rake 任务
-- 重启delayed_job 任务队列处理守护进程和任何其他后台进程
-- 将分阶段发布符号链接到“当前”(乘客 Web 根目录)
-- 重启乘客(通过触摸应用目录中的“tmp/restart”)
这是一个非常标准的 Rails 部署过程。我注意到它的一个巨大瓶颈是为每个需要它的任务加载 rails 环境。对于我的一个较大的应用程序,环境加载需要大约 40 秒或更长时间,并且对于需要 rails 环境的 n 个任务(运行捆绑器、迁移、资产编译、delayed_job 守护程序)重复 n 次。如果这是一个幼稚的问题,请原谅,但我想知道是否有一种简单的方法可以为所有这些任务只加载一次环境(最好比将所有这些任务/作业的实现合并到一个加载的 rake 任务中更容易环境)。