set*_*mcl 5 ruby deployment capistrano ruby-on-rails asset-pipeline
我正在多服务器环境中部署rails应用程序.该应用程序使用资产管道,资产从s3提供.如果我在我部署的每台服务器上运行资产:预编译,一切正常(在每个盒子上生成所需的assets/manifest.yml).
问题是这种效率非常低.我尝试将其中一个服务器指定为主服务器,并且仅运行资产:在该框上预编译.现在的问题是其他服务器没有assets/manifest.yml的副本.
我认为解决方案将涉及找出在所有框上共享生成的assets/manifest.yml文件的最简单方法.
其他人如何处理这种情况?
谢谢你的帮助.
最终通过编写这个上限任务解决了这个问题:
task :assets_precompile, { on_no_matching_servers: :continue, only: { primary: true } } do
transaction do
on_rollback do
notification.exception_deploy
end
run "cd #{current_release} && RAILS_ENV=#{stage} rake assets:precompile"
# sync manifest.yml
download("#{current_release}/public/assets/manifest.yml", "/tmp/manifest.yml")
find_servers().each do |current_server|
run_locally "ssh app@#{current_server.host} 'mkdir -p #{current_release}/public/assets'"
run_locally "scp /tmp/manifest.yml app@#{current_server.host}:#{current_release}/public/assets/manifest.yml"
end
end
end
Run Code Online (Sandbox Code Playgroud)
看起来有点老套,但完成了工作。我们不想在本地进行预编译。
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |