Laravel 5:在服务器环境下运行迁移,而不是本地

4

我在我的Laravel 5应用程序中创建了一组简单的数据库迁移,在我的本地开发环境中运行得很好。

现在是时候在我的新生产服务器环境上运行迁移了。我已经配置了DB连接并部署了应用程序,应用程序看到了数据库,但没有表 - 因此需要运行迁移。

我认为以下命令应该使用设置有远程DB连接详细信息的“production”环境来运行迁移:

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”)以连接到远程生产数据库,但我想正确使用Laravel的环境。

我缺少什么?为什么迁移总是在“local”上运行?

谢谢。
1个回答

8
你不能在本地的artisan上运行任何远程命令。无论你设置ENV变量,你运行的所有内容都只能在本地工作。
设置ENV变量只是告诉应用程序表现得好像它处于该环境中。但并不告诉artisan使用远程生产环境。
如果你想在生产服务器上运行命令,我建议你研究一下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安装、迁移等,然后将应用程序从维护模式中恢复。


啊,我懂了。真遗憾。我可以在本地机器上运行 artisan,并通过手动更改环境文件中的数据库细节来更新远程服务器上的数据库。然后在命令行中输入一行命令就可以创建远程数据库了。我会研究 Envoy...我相信这是更好的方法。但我认为任何特定于环境的数据库交互都可以由环境处理。无论如何,谢谢你的帮助! - Leon
是的,我认为你可以把不同的数据库细节放入一个应用程序中,但这并不是推荐的方式(首先,它只适用于数据库细节,因为你恰好能够远程连接到数据库)。但我想对于我们平时的小型需求来说,这并不是什么大问题,但如果你有多个应用服务器,每个服务器都处理自己的数据库或composer依赖项等是有意义的。 - alexrussell
没错。恰好我有权限直接从我的IP访问数据库。唯一能访问它的其他IP是我的托管服务器/实例的IP。我将使用Envoy创建一个脚本,以便托管服务器是唯一能够访问我的数据库的IP。这对于团队扩展或者我想要移动到不同地点时非常有帮助。我在飞机上使用wifi设置了数据库实例!我不想每次旅行都要开放IP地址,我可能想在飞机上做更多工作!:) 我会接受你的答案,感谢你的帮助。 - Leon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接