Django manage.py 命令在 ElasticBeanstalk 上有 SyntaxError
Posted
技术标签:
【中文标题】Django manage.py 命令在 ElasticBeanstalk 上有 SyntaxError【英文标题】:Django manage.py command having SyntaxError on ElasticBeanstalk 【发布时间】:2019-06-17 05:25:11 【问题描述】:我是第一次使用 AWS,在上传我的 Django 项目后,我想知道如何将数据库的信息备份到一个文件中,以便能够修改数据,以防我必须修改我的模型项目(仍在开发中)并保持一些人口数据。
我想到了django dumpdata
命令,所以为了能够通过 CLI 在 EB 上执行它,我做了以下操作(这可能是我做错了什么):
- eb ssh
- sudo -s
- cd /opt/python/current/app/
- python manage.py dumpdata --natural-foreign --natural-primary -e contenttypes -e auth.Permission --indent 4 > project_dump.json
据我了解,第一个命令只是访问 Elastic Beanstalk 上的 SSH。
第二种是在linux服务器内部拥有root权限,以规避创建和打开文件等问题。
第三个只是访问当前工作应用程序的位置。
最后一个命令是我必须用来转储所有“人类友好”数据的命令,不受任何限制,以便能够在任何其他新数据库中使用它。
我不得不说我在本地机器上尝试了最后一个命令并且 按预期工作,没有任何错误或警告。
所以,我在这里面临的问题是,当我执行最后一个命令时,我收到以下错误:
File "manage.py", line 14
) from exc
^
SyntaxError: invalid syntax
我还尝试跳过sudo -s
,只使用我用来登录ssh的用户的权限,但得到:-bash: project_dump.json: Permission denied
。这就是为什么我认为使用sudo
命令会有所帮助。
另外,我跟着this known tutorial部署 EB 上的 Django+PostgreSQL,所以我用来访问
ssh
的用户是 具有AdministratorAccess
权限的组中的一个。
在尝试所有这些之前,我还寻找了一种直接从AWS-RDS
获取此信息的方法,但我只找到了一种恢复备份的方法,但无法手动修改内容,所以不是我真正需要的。
【问题讨论】:
看起来您运行的 python 版本错误。检查python --version
。应该 > 3.5。 EB 不使用 virtualenv 设置吗?
在运行任何管理命令之前运行 source /opt/python/run/venv/bin/activate
和 source /opt/python/current/env
。这会激活您的 virtualenv 并设置 settings.py 使用的环境变量。
你说得对,我在 EB 上使用 2.7.15,但我的 venv 有“Python 3.6 在 64 位 Amazon Linux/2.7.7 上运行”。此外,我的container_commands
环境已激活。但是现在我正在查看它,我从教程中获得了在每个命令(迁移、填充和收集静态)上激活 virtualenv。所以每次我必须通过ssh访问时都必须激活它?
【参考方案1】:
在您的本地环境中,您需要在正确的 python virtualenv 中运行您的 manage.py
命令,并确保设置了像 RDS_USERNAME
和 RDS_PASSWORD
这样的环境变量。为此,您需要:
-
激活您的虚拟环境
获取您的环境变量
正如您提到的教程末尾所述,这是如何做到的:
source /opt/python/run/venv/bin/activate
source /opt/python/current/env
python manage.py <your_command>
而且你每次 ssh 进入机器时都必须这样做。
注意:您收到权限被拒绝错误的原因是,当您将 dumpdata
的输出通过管道传输到 project_dump.json 时,您正在尝试写入应用程序目录本身。不是一个好主意。尝试使用管道连接到 > ~/project_dump.json
(您的主目录),然后就不需要 sudo。
【讨论】:
以上是关于Django manage.py 命令在 ElasticBeanstalk 上有 SyntaxError的主要内容,如果未能解决你的问题,请参考以下文章
django manage.py执行命令报错,怎么回事,求大神解救
如何查看在 Django 的 manage.py test 命令期间运行了哪些测试