繁体   English   中英

运行脚本时,使Capistrano在服务器上使用别名

[英]Make Capistrano use alias on sever when running scripts

使用Laravel与Capistrano时出现以下问题:

  • 我的托管服务提供商不通过php提供cli php版本,而仅通过usr/bin/local/.../PHP-CLI命令提供
  • 我确实在.bash_profile为其创建了别名,因此从cli运行composer install没问题。

但是,Capistrano(据我了解,由于它以非常基本的外壳开头,因此http://capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not- in-capistrano / )不会加载此别名,因此我从composer脚本(例如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

以下是两个主要要点:

  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

好的,我目前的解决方法是:

在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个通常是可以通过composer调用的composer脚本,但是--no-scripts标志可防止调用它们,因此安装时不会失败。 从capistrano调用它们时,您可以轻松地更改要使用的php

但是,如果有人有更好的解决方案,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM