4

我最近将 turbo sprockets gem https://github.com/ndbroadbent/turbo-sprockets-rails3添加 到我的 rails 应用程序中,我正在使用 capistrano 部署到 Amazon EC2。

我对如何使这项工作有些困惑。assets:precompile 在我的本地机器上工作,但在亚马逊实例上却没有。

长话短说 capistrano 为每个部署创建一个新的发布目录,而 public/assets 目录是空的,所以每次它创建一个新的并且在运行 assets:precompile 时它会预编译所有的资产。

我应该在本地预编译并将它们添加到 git 还是在 capistrano 运行 assets:precompile 之前从上次部署中复制 public/assets 目录?

什么是最干净/最佳实践的解决方案?

/Edit 或者将编译后的资产保存在共享目录中?

4

2 回答 2

6

我能想到的最简单的解决方案是使用 shared/assets 目录来存储我的资产,并在编译资产之前创建一个指向发布 public/assets 目录的符号链接。

 task :assets_precompile do
   run "ln -s #{shared_path}/assets #{release_path}/public/assets"
   run "cd #{release_path} && RAILS_ENV=production bundle exec rake assets:precompile"
 end

编辑:Anjan 指出,如果您使用 deploy:assets (如果您load 'deploy/assets'的 Capfile 中有),默认情况下会这样做,因此这是一个更清洁的解决方案。

于 2012-11-29T10:06:37.027 回答
1

如果部署过程包括到静态文件的符号链接,则 Lesce 的答案具有更大的权重。

示例:config/database.yml 是您不需要调整的东西,也不希望部署对您进行必要的更改......在 shared/assets 中使用它会导致 assets:precompile 被调用时失败。

它也适用于用户加载的图像、附件...

于 2013-09-14T12:14:17.157 回答