我的生产服务器出现问题,assetic:dump
Capifony 部署超时(但并非总是如此)。
在本地运行assetic:dump
很好。也可以部署到不同的登台(功能要弱得多)服务器。
为了解决这个问题(并加快部署速度),我想知道是否可以assetic:dump
在部署之前运行并将那些编译好的资产与部署的其余部分一起发送?
我的生产服务器出现问题,assetic:dump
Capifony 部署超时(但并非总是如此)。
在本地运行assetic:dump
很好。也可以部署到不同的登台(功能要弱得多)服务器。
为了解决这个问题(并加快部署速度),我想知道是否可以assetic:dump
在部署之前运行并将那些编译好的资产与部署的其余部分一起发送?
这有点棘手,我也在尝试这样做(java 在我的服务器上无法正常工作,因此部署失败)。
问题是 Capifony 从源代码控制存储库部署,并且通常转储的资产不在存储库中(它们不应该)。
所以我想这样做的唯一方法是创建一个 Capistrano 任务(Capifony 基于 Capistrano),它将转储资产并将它们同步到服务器上。
编辑:这是我的尝试 编辑:它确实有效,自从我回答了这个问题以来,我一直在使用它。
我确信有很多可能的改进,我不是一个 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
该命令assetic:dump
从当前环境中可用的所有捆绑包中获取资产并将它们放置在web/bundles
(或您告诉它的位置)。在本地执行此操作然后仅移动文件应该没有问题。
您应该运行带有env=prod
选项的命令,以确保生成生产中所需的所有捆绑包。您可能还想web/bundles
在运行命令之前清理它,以便仅在开发中使用的捆绑包的资产(例如探查器)不存在。
我只需在本地运行命令进行测试,从生产中下载资产并进行比较。我现在想不出任何东西,因为 css 和 js 被提供给客户端,并且在不同的机器上生成时不应该有所不同,但我可能错了。
很简单的添加到你的deploy.rb
set :dump_assetic_assets, true