0

我一直在使用 Capistrano 将多个 Rails 应用程序部署到单个 EC2 实例。这些应用程序都由 Apache + Passenger 提供。其中大部分的部署阶段如下:

-- 获取代码,暂存于主应用程序目录的“releases/[timestamp]”子目录中。

-- 运行打包器进行分阶段发布

-- 为分阶段发布运行迁移

-- 运行资产编译 ("assets:precompile") 分阶段发布的 rake 任务

-- 重启delayed_job 任务队列处理守护进程和任何其他后台进程

-- 将分阶段发布符号链接到“当前”(乘客 Web 根目录)

-- 重启乘客(通过触摸应用目录中的“tmp/restart”)

这是一个非常标准的 Rails 部署过程。我注意到它的一个巨大瓶颈是为每个需要它的任务加载 rails 环境。对于我的一个较大的应用程序,环境加载需要大约 40 秒或更长时间,并且对于需要 rails 环境的 n 个任务(运行捆绑器、迁移、资产编译、delayed_job 守护程序)重复 n 次。如果这是一个幼稚的问题,请原谅,但我想知道是否有一种简单的方法可以为所有这些任务只加载一次环境(最好比将所有这些任务/作业的实现合并到一个加载的 rake 任务中更容易环境)。

4

2 回答 2

0

更新:我最终为此设计了自己的解决方案,效果很好。我没有从 shell 单独运行依赖于 rails 环境的每个命令(使用 Capistrano“运行”方法),而是将它们捆绑在一起成为一个依赖于 rails 环境的单个 rake 任务。我之前运行“rake db:migrate”,然后是“rake assets:precompile”等,现在我运行一个单一的 rake 任务,其主体包括“Rake::Task['db:migrate'].invoke”和“Rake ::Task['assets:precompile'].invoke"。环境现在只加载一次。

于 2012-07-19T13:14:43.303 回答
0

我建议为此调查vagrant 。这是一种快速简便的部署方式。它利用厨师来定制流浪盒。我认为您会想要创建自己的食谱(厨师的东西..)来击中您列出的大多数物品。一旦完成,你就可以走了。

于 2012-06-30T23:02:54.597 回答