У меня есть следующая проблема с использованием Capistrano с Laravel:
php
но только через usr/bin/local/.../PHP-CLI
команда.bash_profile
так работает composer install
С Кли это не проблема.Тем не менее, Capistrano (насколько я понимаю из-за его запуска в очень простой оболочке 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
Похоже, ваш сценарий идеально подходит для функции «Командная карта» 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
,
Хорошо, мой текущий обходной путь следующий:
в вашем капистрано 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"
Я не уверен на 100%, если artisan clear-compiled
нужно. В любом случае, эти 2 являются скриптами композитора, которые обычно вызываются через композитор, но --no-scripts
Флаг удерживает их от вызова, чтобы он не зависал при установке. Когда я звоню им из Капистрано, я могу легко изменить php
использовать, как вы можете видеть.
Однако, если у кого-то есть лучшее решение, пожалуйста, дайте мне знать.