Capistrano 3如何获取新版本路径?部署切换目录执行composer install遇阻
解决Capistrano 3部署时无法切换到指定目录执行Composer的问题
从你的配置代码来看,核心问题是你已经定义了主题目录的变量:theme_path,但在build任务里没有使用它,仍然在根release_path下执行命令,自然无法进入Sage主题的正确文件夹。
修正后的部署任务代码
set :theme_path, "#{release_path}/web/app/themes/sage" append :linked_dirs, "web/app/uploads" append :linked_files, ".env" set :keep_releases, 3 namespace :deploy do desc "Build Sage theme dependencies" after :updated, :build do on roles(:app) do # 切换到预定义的主题目录 within fetch(:theme_path) do # 执行Composer安装,建议添加生产环境参数 execute :composer, 'install', '--no-dev', '--optimize-autoloader' end end end end
关键说明
使用
fetch(:theme_path)获取变量:
Capistrano中获取自定义变量的标准方式是用fetch方法,而不是直接引用符号,这样能避免路径解析时的潜在问题,也更符合框架的最佳实践。添加Composer生产环境参数:
--no-dev:生产环境下不安装开发依赖(比如PHPUnit、代码检查工具等),减少部署体积和安全风险。--optimize-autoloader:生成优化的自动加载文件,提升应用运行时的性能。
额外排查点:
如果执行时提示找不到composer命令,你可以:- 直接指定Composer的绝对路径,比如
execute '/usr/local/bin/composer', 'install', ...; - 在Capistrano配置中添加全局的Composer路径设置:
set :composer_path, '/usr/local/bin/composer'。
- 直接指定Composer的绝对路径,比如
内容的提问来源于stack exchange,提问作者Octoxan
相关产品推荐
相关产品推荐

