call_command makemigrations在EBS上不起作用

问题描述 投票:6回答:2

我有一个场景,我需要动态创建一个表,为了动态创建表,我编写了代码来创建一个带有我要创建的表内容的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 elastic-beanstalk eb
2个回答
1
投票

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

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

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

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

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

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.