6

我有一个Laravel安装和设置了三种环境与自身对应的Config目录:如何在AWS Elastic Beanstalk上执行Laravel Artisan迁移?

  • 当地
  • 分期
  • 生产

我用php artisan migrate:make create_users_table等描述here创建数据库迁移。

在我的本地环境中,我使用Vagrant和简单的MySQL服务器设置,并且在生产中使用AWS RDS。

要为分期environment数据库访问我有一个app/config/staging/database.php文件与设置是这样的:

... 
"mysql" => array(
    "driver" => "mysql", 
    "host" => $_SERVER["RDS_HOSTNAME"], 
    "database" => $_SERVER["RDS_DB_NAME"], 
    "username" => $_SERVER["RDS_USERNAME"], 
    "password" => $_SERVER["RDS_PASSWORD"], 
    "charset" => "utf8", 
    "collaction" => "utf8_unicode_ci", 
    "prefix" => "", 
), 
... 

我使用git描述heregit aws.push部署的应用。

现在的问题是:如何在部署时在分段(以及后续生产)EBS服务器上运行迁移?

回答

12

我通过在名为.ebextensions的项目的根目录中创建一个新目录来解决此问题。在该目录中我创建了一个脚本文件my-scripts.config

.ebextensions/ 
    my-scripts.config 
app/ 
artisan 
bootstrap 
... 

文件my-scripts.config获取在EBS部署执行,是一个YAML文件,看起来像这样:

container_commands: 
    01-migration: 
     command: "php /var/app/ondeck/artisan --env=staging migrate" 
     leader_only: true 

添加目录和文件与git,提交并运行git aws.push,它将迁移。

关于如何在.ebextensions工作的东西的解释可以找到here

路径/var/app/ondeck是您的应用程序在您的脚本运行时所处的位置,之后它将被复制到/var/app/current中。

工匠选项--env=staging是告诉工匠很有用什么样的环境应该运行,以便它可以从app/config/staging/database.php

找到正确的数据库设置如果你需要一个快速和肮脏的方式来登录,为什么迁移命令失败您可能想要尝试一些类似"php /var/app/ondeck/artisan --env=staging migrate > /tmp/artisan-migrate.log"的内容,以便您可以登录到ec2实例并检查日志。

+0

那么,我正在做的下一次迁移会发生什么?对于那些我不能再添加到GIT的人,因为他们已经添加了。或者我不能运行'''git aws.push'''。那么,这将是什么步骤? - 谢谢。 –

+0

@HimelNagRana我不太关注,但您可能会误解迁移(应该)如何工作。你所有的迁移脚本都应该在git仓库中。您的数据库不应该在每个部署中“重置”,迁移只应在迁移脚本中执行“up”方法中的小改动。查看迁移文档:http://laravel.com/docs/4.2/migrations – oskarth

+0

我想我无法让自己清楚。对不起。我了解迁移是如何工作的(或者应该工作)。这是一个相当部署的问题,我能够弄清楚如何。 例如,假设我想为用户实体添加“last_login”。然后,我将生成迁移并运行它。我的问题是,在部署到ElasticBeanstalk时,是否需要做特殊的事情来使迁移运行?后来我发现答案是“否”。 无论如何。 –