【问题标题】:call_command makemigrations does not work on Elastic Beanstalkcall_command makemigrations 不适用于 Elastic Beanstalk
【发布时间】:2018-07-29 10:58:33
【问题描述】:

我有一个场景,我需要动态创建表,为了动态创建表,我编写了代码来创建一个 model.py 文件,其中包含我要创建的表内容。

创建此文件后,我想从代码本身执行 makemigrations 命令,例如

 from django.core.management import call_command
 call_command('makemigrations')
 call_command('migrate')

它在我的本地以及 AWS EC2 实例中都可以正常工作,但它不适用于 Elastic Beanstalk (eb)。当我尝试从 eb ssh 手动运行 makemigrations 命令时,它会给我以下错误。

PermissionError: [Errno 13] Permission denied: '/opt/python/bundle/47/app/quotations/migrations/0036_dynamic_table.py'

任何人都知道我该如何处理这种情况。

另一件事是,当我创建新的动态模型时,我如何将该代码推送到 git,因为在新部署中,EBS 会将现有代码替换为新代码,所以这样我会丢失文件我使用这些命令在 EBS 中创建的

谢谢

【问题讨论】:

    标签: python django amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

    我同意 Eddie 你需要修改迁移文件夹的权限。

    迁移文件夹位于: /opt/python/current/app/quotations/migrations/

    您可能需要执行以下操作:

    subprocess.call(['chmod', '-R', '+w', '/opt/python/current/app/quotations/migrations/'])
    

    您可能在 makemigrations 调用之前和/或之后需要这个。

    如果您还有其他问题,请发表评论。

    【讨论】:

    • 它给了我这个错误:不允许操作:-(
    • 我明白为什么会出现这个错误。问题是您正在尝试以不打算使用的方式使用 Django。你能告诉我为什么需要动态创建模型文件吗?
    • 我已经编写了代码来完成一个功能,其中表字段不是特定的,字段将由管理员动态添加,所以我需要执行 makemigrations 和 migrate 命令来创建管理员想要的那些表从管理员创建。
    【解决方案2】:

    这看起来像是一个简单的权限错误,可能与 EBS 本身无关。执行ls -al /opt/python/bundle/47/app/quotations/migrations/ 并查看0036_dynamic_table.py 是否已经存在。如果是,请删除它,如果不是,请查看沿该路径的权限,以验证运行迁移的用户是否具有写入和执行所有目录的权限。

    现在我想到了,很可能您没有以拥有目录结构的同一用户身份运行迁移命令。看看吧。

    【讨论】:

    • 我在这里说的是生成动态模型,一旦创建了这些模型文件,我就会调用 call_command('makemigrations') 方法,但是这个命令没有足够的权限来执行这个,所以我' m 无法仅从代码生成迁移。
    • 对,您需要权限才能写入迁移文件。我怀疑是否有办法解决这个问题。
    猜你喜欢
    • 2018-10-01
    • 2016-04-02
    • 1970-01-01
    • 2017-09-08
    • 2015-09-30
    • 2020-11-02
    • 2017-07-04
    • 2017-09-07
    • 2016-01-08
    相关资源
    最近更新 更多