使用Capistrano和laravel我有以下问题:
php
提供cli php版本,但仅通过usr/bin/local/.../PHP-CLI
命令提供.bash_profile
为其创建了一个别名,因此从cli运行composer install
没问题。然而,Capistrano(据我所知,由于它是从一个非常基本的shell http://capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/开始)不加载这个别名,所以我从作曲家脚本中得到一个错误,例如php artisan
。
然而,在我的开发机器上,我需要将它保存为php,因为这是php所在的位置。
如何最好地解决这个问题?您还需要更多信息吗?感谢。
以防它有用,这就是我调用脚本的方式:
desc 'Composer install'
task :composer_install do
on roles(:app), in: :groups, limit:1 do
execute "/usr/local/bin/php5-56STABLE-CLI composer.phar install --working-dir #{fetch(:release_path)}"
execute "cp #{fetch(:deploy_to)}/shared/.env #{fetch(:release_path)}/.env"
end
end
答案 0 :(得分:2)
听起来你的情景非常适合Capistrano"命令地图"功能,如此处所述:https://github.com/capistrano/sshkit#the-command-map。
以下是两个主要内容:
编写Capistrano execute
命令,以便二进制名称(php
)是一个单独的参数。这将允许使用命令映射替换它。例如:
execute :php, "composer.phar install --working-dir #{fetch(:release_path)}"
在Capistrano部署配置中,告诉命令映射如何替换:php
命令,如下所示:
SSHKit.config.command_map[:php] = "/usr/local/bin/php5-56STABLE-CLI"
如果您希望此替换影响所有部署环境,请将其放在deploy.rb
中。如果它仅适用于您的生产环境,请将其放在production.rb
。
答案 1 :(得分:0)
好的,我目前的解决方法如下:
在您在部署更新时执行的脚本中的capistrano deploy.rb
中。
desc 'Composer install'
task :composer_install do
on roles(:app), in: :groups, limit:1 do
execute "/usr/local/bin/php5-56STABLE-CLI /path/to/composer.phar install --working-dir #{fetch(:release_path)} --no-scripts"
execute "cd #{fetch(:release_path)} && /usr/local/bin/php5-56STABLE-CLI artisan clear-compiled"
execute "cd #{fetch(:release_path)} && /usr/local/bin/php5-56STABLE-CLI artisan optimize"
end
end
end
after "deploy:updated", "deploy:composer_install"
如果需要artisan clear-compiled
,我不能100%确定。无论如何,那些2是通常通过composer调用的编写器脚本,但是--no-scripts
标志使它们不被调用,因此它在安装时不会失败。从capistrano调用它们时,我可以轻松地更改要使用的php
,如您所见。
但是,如果有人有更好的解决方案,请告诉我。