我在 Laravel 5 应用程序中创建了一组简单的数据库迁移,它们在我的本地开发环境中运行良好。
现在是时候在我的新生产服务器环境上运行迁移了。我已经配置了数据库连接并部署了应用程序,并且应用程序可以看到数据库,但没有表 - 因此需要运行迁移。
我认为以下命令应该使用“生产”环境运行迁移,该环境是使用远程数据库连接详细信息设置的:
php artisan --env=production migrate
迁移有效,但它在本地环境上运行!这是我的生产环境的环境文件(使用亚马逊弹性beanstalk服务):
.elasticbeanstalk.env
APP_ENV=production
APP_DEBUG=true
APP_URL=<myappname.elasticbeanstalk.com>
DB_HOST=<myapp.amazonserveraddress.amazonaws.com:3306>
DB_DATABASE=<mydbname>
DB_USERNAME=<mydbusername>
DB_PASSWORD=<mydbpassword>
因此,要么我的环境文件配置不正确,要么 artisan 无法切换到该环境。我可以更改我的 .env 文件(本地开发环境,名为“local”)以连接到远程生产数据库,但我想正确使用 Laravels 环境。
我缺少什么?为什么迁移总是在“本地”运行?
Thanks.
您无法在本地运行任何远程命令artisan
。您在那里运行的任何内容都只能在本地运行(即使您设置了ENV
多变的)。
设置ENV
变量只是告诉应用程序表现得像in那个环境。但不告诉工匠使用远程生产环境。
如果您想在生产服务器上运行命令,我建议您查看Envoy http://laravel.com/docs/5.1/envoy。它是一个完全独立的项目(并且不必仅与 Laravel 项目一起使用)并且专门用于部署。
它基本上是一个围绕 SSH 连接到远程服务器然后运行命令的薄包装。一个例子Envoy.blade.php
我网站上的文件可能如下所示:
@servers(['web' => 'account@server'])
@task('deploy')
cd ~/src
php artisan down
git pull origin master
composer install --no-dev --no-progress --prefer-dist
php artisan migrate --force --no-interaction
php artisan optimize
php artisan up
@endtask
SSH 进入后,将应用程序置于维护模式,提取新代码,执行各种“新代码”设置,例如 Composer 安装、迁移等,然后将应用程序退出维护模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)