2016-07-18 8 views
0

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

  • Мой хостинг-провайдер не предоставляет версию кли PHP через php, но только с помощью usr/bin/local/.../PHP-CLI команды
  • I создал псевдоним для него в моем .bash_profile, поэтому запуск composer install из cli не представляет проблемы.

Однако Capistrano (насколько я понимаю, из-за этого, начиная с очень основной оболочкой http://capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/) не нагружает этот псевдоним, так что я получаю сообщение об ошибке из сценариев композитора, например php artisan.

Однако на моей машине dev мне нужно сохранить ее как 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 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 не позволяет им быть вызванным, чтобы он не прерывался при установке. Когда вы вызываете их из capistrano, я могу легко изменить, какой php использовать, как вы можете видеть.

Однако, если у кого-то есть лучшее решение, сообщите мне.

2

Это звучит как ваш сценарий идеально подходит для «команды карты» функции 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.

+0

Эй, я думаю, что это не сработает (исправьте меня, если я ошибаюсь), потому что php-вызов находится в файле composer.json, и этот файл должен запускаться на моей машине dev без Capistrano. Так что ваше решение не сработает, правильно?Пожалуйста, дайте мне знать, если я что-то не понял. –

+0

Я не могу заменить php, как я могу использовать псевдоним bash, правильно? –

+0

Правильно, эта подстановка работает только для вызовов 'php', выполняемых явными командами Capistrano' execute'. Мой ответ не поможет, если команды 'php' будут похоронены внутри другого скрипта. –