我在Fortrabbit服务器上安装了一个Laravel应用程序。我可以做以下
$ ssh user@server
$ cd htdocs
$ php artisan migrate
这非常有效很好。
但我正在尝试使用Envoy来完成这样的任务。所以我做了一个简单的任务:
@servers(['test' => 'user@server'])
@task('task:test', ['on' => 'test'])
cd htdocs
php artisan migrate
@endtask
然而,在这样做的时候,我遇到了以下问题:
$ envoy run task:test
[user@server]: (><)/ Welcome to the rabbit hole. (><)/
[user@server]: [PDOException] SQLSTATE[HY000] [2002] No such file or directory
值得注意的是,db连接使用Fortrabbit接口中设置的ENV变量的凭据。如果我通过SSH连接到服务器并执行env
,则所有变量都会按原样列出
$ ssh user@server env
我只得到Fortrabbit服务器ENV变量的一小部分。
我不知道错误的原因是什么,在询问谷歌时也找不到任何东西。有人能解释一下吗?非常感谢。
正如@ukautz所说,会话脚本不是由特使执行的,这就是为什么您的一些环境变量丢失的原因。
以下是我所做的:
@servers(['dev'=>"<<user@server>>"])
@task('list')
. /etc/profile.envvars
env
@endtask
它显示了所有ENV变量,包括您在仪表板上设置的变量!
您的脚本应该可以使用以下内容:
@servers(['test' => 'user@server'])
@task('task:test', ['on' => 'test'])
. /etc/profile.envvars
cd htdocs
php artisan migrate
@endtask
我建议检查您的环境分区是否按预期工作。
$ php artisan env
如果没有,你可以强制使用手工命令的环境,比如:
$ php artisan migrate --env=test_server