涡轮链轮和卡皮斯特拉诺

les*_*sce 4 amazon capistrano ruby-on-rails amazon-ec2 sprockets

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

我对如何使这项工作感到有点困惑.assets:precompile在我的本地机器上运行,但在亚马逊实例上却没有.

长话短说明capistrano为每个部署创建一个新的发布目录,并且public/assets目录为空,因此每次创建新目录时和运行资产时:预编译它会预编译所有资产.

我应该预先编译localy并将它们添加到git中,或者在capistrano运行资产之前复制上一次部署中的public/assets目录:precompile?

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

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

les*_*sce 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
Run Code Online (Sandbox Code Playgroud)

编辑:Anjan指出,如果你使用deploy:assets(如果你load 'deploy/assets'在你的Capfile中)这是默认完成的,这是一个更清洁的解决方案.

  • 你的`Capfile`是否有'加载'部署/资产'?我认为该行负责在部署时预编译资产,默认情况下将其放在`shared/assets`文件夹中. (3认同)