ed2*_*209 9 php deployment symfony assetic capifony
我的生产服务器上有一个问题,assetic:dump即在Capifony部署上超时(但并非总是如此).
assetic:dump在当地跑步很好.另外,部署到不同的staging(功能更弱)服务器也没问题.
为了解决这个问题(以及加速部署),我想知道是否可以assetic:dump在部署之前运行并且只是将这些已编译的资产与其余部署一起发送?
这有点棘手,我也试图这样做(java在我的服务器上运行不正常,因此部署失败).
问题是Capifony从源控制存储库部署,并且通常转储的资产不在存储库中(并且它们不应该).
所以我想这样做的唯一方法是创建一个Capistrano任务(Capifony基于Capistrano),它将转储资产并将它们同步到服务器上.
编辑:这是我的尝试 编辑:它确实有效,我一直在使用它,因为我回答了这个问题.
我确信有很多可能的改进,我不是一个红宝石家伙,我也不是一个shell脚本人.
在deploy.rb中,您可以添加两个任务:
before "deploy:update_code", "deploy:dump_assetic_locally"
after "deploy:update_code", "deploy:rsync_local_assets_to_server"
Run Code Online (Sandbox Code Playgroud)
和那些任务相关的代码(在同一个文件中):
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2462 次 |
| 最近记录: |