【问题标题】:Asset fingerprint differs between servers服务器之间的资产指纹不同
【发布时间】:2013-12-04 22:06:40
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您可以尝试在application.js 中单独列出每个文件吗?我想知道require_tree 是否将订单委托给文件系统,并且无论出于何种原因,您的两台服务器都以不同的顺序返回其资产目录的内容。
  • 我认为你可能是对的。明天试试。谢谢。

标签: ruby-on-rails asset-pipeline


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多