call_command makemigrations在EBS

时间:2018-02-19 08:43:02

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

我有一个场景,我需要动态创建一个表,要动态创建表,我已编写代码来创建一个带有我要创建的表内容的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中创建的文件

由于

2 个答案:

答案 0 :(得分:1)

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

现在我想起来了,最有可能的是你没有像拥有目录结构的同一个用户那样运行迁移命令。看一看。

答案 1 :(得分:1)

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

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

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

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

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

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