【发布时间】:2014-04-18 22:46:50
【问题描述】:
我正在使用 capistrano 部署 Rails 应用程序并在本地编译资产并使用 rsync 将它们复制到服务器。这就是预编译中发生的事情
desc 'Run the precompile task locally and rsync with shared'
task :precompile, :roles => :web, except: { no_release: true } do
run "rm -f #{shared_path}/assets/manifest*"
%x{RAILS_ENV=production bundle exec rake assets:precompile}
%x{rsync -rave "ssh -i #{ssh_options[:keys][0]}" public/assets #{user}@#{domain}:#{shared_path}}
%x{RAILS_ENV=production bundle exec rake assets:clean}
%x{rm -rf public/assets}
end
部署完成后,资源在服务器上显示正常,但 rails 应用程序不显示最新的资源文件。它显示了最后一个清单文件中的文件。我通过在 capistrano 中运行 run "rm -f #{shared_path}/assets/manifest*" 删除了旧的清单文件,但是 rails 应用程序没有选择新的清单。我缺少什么以及如何在部署后强制它使用最新的清单文件。
【问题讨论】:
-
每个人都想出一个解决方案?从 Rails 3 -> 4 升级后,我遇到了类似的行为。黑客解决方案是部署两次。不理想:-/
-
也很想知道是否有人找到了解决此问题的方法
-
这里有同样的问题。我尝试升级到最新的稳定链轮(2.12.3),然后改用 sprockets-rails(2.2.2)。还尝试在我的服务器上运行
assets:clean,希望有某种缓存。运气不好! -
仅供参考 - Sprockets 选择它可以找到的第一个清单文件。见第 50 行:github.com/sstephenson/sprockets/blob/master/lib/sprockets/…
标签: ruby-on-rails capistrano assets precompile