我正在将rails 3.2.14应用程序部署到2个不同的服务器上,并且前面有一个负载均衡器。资产当前正在服务器上进行预编译(通过capistrano部署)。
由于某种原因,application.js文件上的指纹在两台服务器之间是不同的。源文件是相同的。如果我从application.js中删除//= require_tree .
,那么它们都会神奇地拥有相同的指纹。
我遇到过一些提到这个问题的帖子,但从未真正解决根本原因:
我试图避免在本地预先编译资产,以此作为解决此问题的方法(至少现在......)。
答案 0 :(得分:1)
我无法轻松解决此问题(即不想在我的application.js中完全拼出资产树),所以我最终覆盖了deploy:assets
任务以在本地编译资产并推送到我的群集中的每个服务器。
namespace :deploy do
namespace :assets do
desc 'Run the precompile task locally and scp to server'
task :precompile, :roles => :web, :except => { :no_release => true } do
if releases.length <= 1 || capture("cd #{latest_release} && #{source.local.log(source.next_revision(current_revision))} vendor/assets/ app/assets/ | wc -l").to_i > 0
run_locally "bundle exec rake assets:precompile"
run_locally "cd public; tar -zcvf assets.tar.gz assets"
top.upload "public/assets.tar.gz", "#{shared_path}", :via => :scp
run "cd #{shared_path}; tar -zxvf assets.tar.gz"
run_locally "rm public/assets.tar.gz"
run_locally "bundle exec rake assets:clean"
else
logger.info 'Skipping asset pre-compilation because there were no asset changes'
end
end
end
end