我将 Capifony 配置为部署到我的远程服务器,当我部署项目时,在 capifony 执行回滚操作后出现一些错误。但是在 capifony 执行symfony:composer:dump_autoload
操作之后,它会转储 chache 并使用新的发布路径自动加载文件。运行 symfony 应用程序后,出现错误:
PHP Warning: include(): Failed opening '/var/www/vhosts/user/app/releases/20130805162052/src/Rocket/ApplicationBundle/RocketApplicationBundle.php' for inclusion (include_path='/........') in /var/www/vhosts/user/app/shared/vendor/composer/ClassLoader.php on line 185
symfony:composer:dump_autoload
所以问题是:如果部署出现任何错误,我该如何执行
像这样的东西:
after "deploy:rolling_back_action", "symfony:composer:dump_autoload"
谁能帮我?
编辑:
我尝试在当前部署会话中重新声明命名空间:deploy:update_code
并更改on_rollback
操作,如果我遇到任何错误,这个钩子是有效的。但是symfony:composer:dump_autoload
在 on_rollback 事件releas_path
中执行的操作不是当前的,我不能重新声明...这是我的代码,当我尝试重新声明命名空间时:
namespace :deploy do
task :update_code, :except => { :no_release => true } do
on_rollback { my_namespace.rollback }
strategy.deploy!
finalize_update
end
end
namespace :my_namespace do
task :rollback, :except => { :no_release => true } do
run "rm -rf #{release_path}; true" #default capistrano action on rollback
#my custom actions
#run "cd "+shared_path+"/../current"
#run "php composer.phar dump-autoload"
set :release_path, shared_path+"/../current"
symfony.composer.dump_autoload
end
end
到目前为止,我已经找到了解决此问题的临时解决方案 - 每次部署后执行cap symfony:composer:dump_autoload
更新路径并转储新的自动加载信息,但我不喜欢......
我可以通过 re declare namespace 或其他解决方案来了解真相吗?