【问题标题】:Laravel Migration Local vs ProductionLaravel 迁移本地与生产
【发布时间】:2016-04-27 15:34:46
【问题描述】:

因此,该应用程序在生产环境和本地环境中运行良好。然后,在本地,我对数据库进行了一些更改,例如添加列和更改列的属性。当我去本地迁移时,我遇到了一个错误,所以我最终删除了那个迁移文件,回滚了整个表,并创建了一个新的迁移,一切都按照我的意愿进行了设置。将其迁移到本地并且它正在工作。

现在,我将这些更改推送到 github,它们会自动拉到 Laravel Forge 并拉到生产服务器。我收到一条错误消息,提示“表已存在”。因此,github 存储库对已在我的生产服务器上运行的那个表进行了新迁移。

我正在尝试找出如何解决此问题,而不破坏生产数据库表中当前的记录,并确保在我需要删除表时进行适当的迁移。

谢谢!

【问题讨论】:

  • 这是您真正意识到登台/生产影子服务器重要性的实例之一 :)
  • 什么是“生产阴影”?
  • 这是您在部署到实时服务器之前首先“暂存”部署的地方,以缓解直接将更改部署到实时服务器的一些问题。比如这个。特别是在有多个开发人员在一个项目上工作并且涉及迁移脚本的情况下,它真的很方便。
  • 好的,是的,我现在就这样做了,但由于这个原因,没有那么成功。本地环境、暂存环境和生产环境。
  • 以下是否解决了您的问题?

标签: laravel laravel-5.2


【解决方案1】:

如果您想在生产中的数据库上添加新列或更改任何内容。

您需要创建一个新的迁移,将这些行添加到数据库中。这并不像更改现有迁移那么简单。

您在生产环境中获得“表已存在”的原因是迁移已经运行。

例如,如果您的用户表已经迁移,并决定要为现有表添加昵称。

您将创建一个新的迁移php artisan make:migration alter_users_table_add_nickname

然后在这个迁移中使用Schema::create,它将使用Schema::table

public function up()
{
    Schema::table('users', function(Blueprint $table)
    {
        $table->string('nickname');
    });
}

public function down()
{
    Schema::table('users', function(Blueprint $table){
        $table->dropColumn('nickname');

    });
}

您可以在Creating Columns 上阅读更多信息

【讨论】:

  • 好吧,我已经知道了。但是,在这种特定情况下,我应该问,如何协调我的存储库中的新迁移文件和服务器上的文件。也许就像将生产分支与我的本地分支同步一样简单,所以这些文件是相同的。
  • 好吧,一个快速的解决办法是导出生产数据库的内容而不是结构。删除表并在 forge 上运行 deploy 以使用您编辑的迁移重新运行迁移,然后将数据重新导入。不过,我建议您检查原始迁移所在的提交并按照上述步骤操作。
  • 好的,根据您的最后一句话,我需要将生产同步回本地,以便这些迁移再次相同。我会这样做并跟进标记您的答案。谢谢!
  • 酷。让我知道你的情况。
  • 我最终导出了表记录(使用 MySQL Workbench),删除了表,然后再次运行迁移并重新加载记录。超级简单。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2019-08-12
  • 2018-03-23
  • 1970-01-01
  • 2013-08-20
  • 2014-07-27
  • 2019-11-14
相关资源
最近更新 更多