服务器之间的资产指纹不同

ste*_*ser 5 ruby-on-rails asset-pipeline

我正在将我的 rails 3.2.14 应用程序部署到 2 个不同的服务器,它们前面有一个负载平衡器。资产目前正在服务器上预编译(通过 capistrano 部署)。

出于某种原因,application.js 文件上的指纹在两个服务器之间是不同的。源文件是相同的。如果我//= require_tree .从 application.js 中删除 ,那么它们都神奇地具有相同的指纹。

我遇到过一些提到这个问题的帖子,但从未真正解决根本原因:

我试图避免在本地预编译资产作为解决这个问题的一种方式(至少现在......)。

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