Django 在本地迁移工作,但不在 Elastic Beanstalk 生产上

Posted

技术标签:

【中文标题】Django 在本地迁移工作,但不在 Elastic Beanstalk 生产上【英文标题】:Django migrate work on local but not on Elastic Beanstalk production 【发布时间】:2016-02-18 23:05:41 【问题描述】:

我正在开发一个已经上线数月的 django 项目。没有更改设置文件或环境本身。

我最近向模型添加了一个字段,但是当我将它部署到我的 Amazon Elastic Beanstalk 环境时,它无法将更改迁移到数据库。我收到以下错误消息:

Synchronizing apps without migrations:
    Creating tables...
        Running deferred SQL...
    Installing custom SQL...
Running migrations:
    No migrations to apply.
    Your models have changes that are not yet reflected in a migration, and so won't be applied.
    Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.

现在错误消息可能听起来很明显,但问题是我将数据库从生产服务器复制到本地数据库服务器并再次尝试migrate 命令,Voila 在本地工作。没有关于正在更改模型的错误消息。

当我运行makemigrations 时,我得到No changes detected.。我还为我项目中的每个应用程序尝试了makemigrations <app>。还是说No changes detected

总结一下:

我对模型进行了更改,对它进行了新的迁移,我尝试在生产服务器上迁移它,结果出错。我尝试在本地服务器上使用数据库的精确副本,它工作正常。

想法?

编辑:

这似乎与ImageField 有关。我添加到模型中的字段是 ImageField,但是当我删除它,然后测试添加 CharFieldFileField 时,迁移工作正常。

当我随后修改FileField 并将其变为ImageField 时,migrate 错误返回。

非常混乱。

【问题讨论】:

【参考方案1】:

我能够通过完全重建我在 Amazon 的环境并将我的本地版本的数据库导入新的 RDS/mysql 实例来解决这个问题。

这不是一个“正确”的解决方案,因为它实际上并没有找出发生这种情况的原因。我同步并重新同步了我的数据库数十次。我回到了一个成功同步的迁移文件,但是当我再次将我的ImageField 添加到我的模型时,我在尝试manage.py migrate 时遇到了同样的错误。

重建环境迁移后再次工作。

【讨论】:

以上是关于Django 在本地迁移工作,但不在 Elastic Beanstalk 生产上的主要内容,如果未能解决你的问题,请参考以下文章

validate_email python库在本地机器上工作,但不在aws弹性bean上

Django中的Send_mail,在shell中工作,在本地工作,不在视图中

Laravel 视图在生产中工作但不在本地

外部接口。 addcallback 在本地工作,但不在服务器上?

Windows 7 IIS 在本地工作但不在外部工作

SQLite 工作,但 PostgreSQL 迁移数据库导致错误 - Django 3.0