我的生产服务器出现问题,assetic:dump
在 Capifony 部署时超时(但并非总是如此)。
在本地运行 assetic:dump
没问题。也可以部署到不同的登台(功能不那么强大)服务器。
要解决此问题(并加快部署速度),我想知道是否可以在部署之前运行 assetic:dump
并将这些合规 Assets 与部署的其余部分一起发送?
最佳答案
这有点棘手,我也在尝试这样做(java 在我的服务器上无法正常工作,因此部署失败)。
问题是 Capifony 从源代码控制存储库部署,通常转储的 Assets 不在存储库中(它们不应该)。
所以我想做到这一点的唯一方法是创建一个 Capistrano 任务(Capifony 基于 Capistrano),它将转储 Assets 并将它们同步到服务器上。
编辑:这是我的尝试 编辑:它确实有效,自从我回答问题后我就一直在使用它。
我确信有很多可能的改进,我不是 ruby 专家,我也不是 shell 脚本专家。
在您的 deploy.rb 中,您可以添加两个任务:
before "deploy:update_code", "deploy:dump_assetic_locally"
after "deploy:update_code", "deploy:rsync_local_assets_to_server"
以及与这些任务关联的代码(在同一个文件中):
namespace :deploy do
task :dump_assetic_locally, :roles => :web do
run_locally "php app/console assetic:dump --env=prod"
end
task :rsync_local_assets_to_server, :roles => :web do
finder_options = {:except => { :no_release => true }}
find_servers(finder_options).each {|s| run_locally "rsync -az --delete --rsh='ssh -p #{ssh_port(s)}' #{local_web_path}/js/ #{rsync_host(s)}:#{release_path}/web/js/" }
find_servers(finder_options).each {|s| run_locally "rsync -az --delete --rsh='ssh -p #{ssh_port(s)}' #{local_web_path}/css/ #{rsync_host(s)}:#{release_path}/web/css/" }
end
def local_web_path
File.expand_path("web")
end
def rsync_host(server)
:user ? "#{user}@#{server.host}" : server.host
end
def ssh_port(server)
server.port || ssh_options[:port] || 22
end
end
关于php - 是否可以编译 Symfony2 assetic :dump and deploy that rather than run it on the server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12261861/