我们在deploy.mysite.com下设置了一个Laravel部署网站,该网站负责处理众多其他网站的部署。
我正在尝试部署的另一个网站也是Laravel网站,位于site2.myothersite.com下。
两者都在同一台服务器上。部署在site2上调用脚本,此部署脚本在cd
'ing到项目目录后运行各种命令。我们使用以下内容来更新数据库结构。
php artisan migrate --force
通常,当在项目根目录中直接通过SSH运行时,它运行得很好。
但是,当通过部署脚本(使用php exec()
运行这些命令)运行时,该过程确实有效 - 但是,它不会更新我们已经进入的项目,而是更新部署站点的数据库结构!
似乎cd
命令忽略了我将php artisan migrate
进入另一个项目的事实,它从当前目录获取数据库值。
我怎样才能改变这种行为?
而不是cd
到目录,您可以将命令更改为类似于此的命令:
cd
这将为提供的目录运行artisan命令。
在玩了多个不同的解决方案之后,我终于意识到问题是来自项目的php /var/www/sitea/artisan migrate --force
文件我正在设置环境变量,然后没有被任何东西覆盖,因此基本上运行代码是错误的现场。
我做了什么来解决这个问题
在我的部署脚本中,我手动加载了.env
文件并用.env
而不是overload
覆盖环境变量;
load
这实际上是我必须要做的就是让原始脚本正常工作。
注意:由于这是一个所有端的laravel安装,已安装$dotenv = Dotenv::create(__DIR__);
$dotenv->overload();
包。这可以通过单独安装来用于任何项目。