Заставьте Capistrano использовать псевдоним на сервере при запуске скриптов

У меня есть следующая проблема с использованием Capistrano с Laravel:

  • Мой хостинг-провайдер не предоставляет версию CliPP через 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

0

Решение

Похоже, ваш сценарий идеально подходит для функции «Командная карта» Capistrano, как описано здесь: https://github.com/capistrano/sshkit#the-command-map.

Вот два основных вывода:

  1. Напишите свой Capistrano execute команды, так что двоичное имя (php) это отдельный аргумент. Это позволит заменить его, используя карту команд. Например:

    execute :php, "composer.phar install --working-dir #{fetch(:release_path)}"
  2. В конфигурации развертывания Capistrano скажите карте команд, как заменить :php команда, как это:

    SSHKit.config.command_map[:php] = "/usr/local/bin/php5-56STABLE-CLI"

Если вы хотите, чтобы эта замена влияла на все среды развертывания, поместите ее в deploy.rb, Если это относится только к вашей производственной среде, поместите его в production.rb,

2

Другие решения

Хорошо, мой текущий обходной путь следующий:

в вашем капистрано 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 использовать, как вы можете видеть.

Однако, если у кого-то есть лучшее решение, пожалуйста, дайте мне знать.

0