Laravel 5:在服务器环境而不是本地运行迁移
Posted
技术标签:
【中文标题】Laravel 5:在服务器环境而不是本地运行迁移【英文标题】:Laravel 5: run migrations on server environment, not local 【发布时间】:2015-11-12 17:15:51 【问题描述】:我在我的 Laravel 5 应用程序中创建了一组简单的数据库迁移,它们在我的本地开发环境中运行良好。
现在是时候在我的新生产服务器环境上运行迁移了。我已经配置了数据库连接并部署了应用程序,应用程序可以看到数据库,但没有表 - 所以需要运行迁移。
我相信,以下命令应该使用“生产”环境运行迁移,该环境设置有远程数据库连接详细信息:
php artisan --env=production migrate
迁移有效,但它在本地环境中运行!这是我的生产环境的环境文件(使用亚马逊弹性beantalk服务):
.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>
所以要么我的环境文件配置不正确,要么工匠无法切换到该环境。我可以更改我的 .env 文件(本地开发环境,名为“local”)以连接到远程生产数据库,但我想正确使用 Laravel 环境。
我错过了什么?为什么迁移总是在“本地”上运行?
谢谢。
【问题讨论】:
【参考方案1】:您无法在本地 artisan
上运行任何远程命令。你在那里运行的任何东西都只能在本地工作(即使你设置了ENV
变量)。
设置ENV
变量只是为了告诉应用程序的行为就好像它在那个环境中一样。但没有告诉工匠使用远程生产环境。
如果您想在生产服务器上运行命令,我建议您查看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 install、迁移等,然后将应用程序退出维护模式。
【讨论】:
啊,我明白了。真可惜。我可以在本地机器上运行 artisan 并通过手动更改环境文件中的数据库详细信息来更新远程服务器上的数据库。然后命令行中的一行和远程数据库将被创建。我会调查 Envoy ......我相信这是一种更好的做事方式。但在我看来,任何特定于环境的数据库交互都可以由环境处理。无论如何感谢您的帮助! 是的,我想您可以将不同的数据库详细信息放入一个应用程序中,但这并不是真正推荐的方式(首先,它仅适用于数据库详细信息,因为您碰巧能够远程连接到数据库)。但我认为对于我们正常的小型用途而言,这没什么大不了的,但显然,如果您有多个应用程序服务器,那么每个应用程序服务器处理自己的数据库或作曲家依赖项等是有意义的。 是的。碰巧我有安全权限可以直接从我的 IP 访问我的数据库。唯一可以访问它的其他 IP 是我的托管服务器/实例的 IP。我将使用 Envoy 创建一个脚本,以便托管服务器是能够访问我的数据库的唯一 IP。当团队扩大或我想搬到不同的地方时,这将使我受益匪浅。我在飞机上使用 wifi 设置了数据库实例!我不想每次旅行时都必须打开 IP 地址,我可能想在飞机上做更多的工作! :) 我会接受你的回答,谢谢你的帮助。以上是关于Laravel 5:在服务器环境而不是本地运行迁移的主要内容,如果未能解决你的问题,请参考以下文章
iBrand 教程 0.1:Windows + Homestead 5 搭建 Laravel 开发环境