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/activatesource /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_USERNAMERDS_PASSWORD 这样的环境变量。为此,您需要:

    激活您的虚拟环境 获取您的环境变量

正如您提到的教程末尾所述,这是如何做到的:

source /opt/python/run/venv/bin/activate
source /opt/python/current/env
python manage.py <your_command>

而且你每次 ssh 进入机器时都必须这样做。

注意:您收到权限被拒绝错误的原因是,当您将 dumpdata 的输出通过管道传输到 project_dump.json 时,您正在尝试写入应用程序目录本身。不是一个好主意。尝试使用管道连接到 &gt; ~/project_dump.json(您的主目录),然后就不需要 sudo。

【讨论】:

以上是关于Django manage.py 命令在 ElasticBeanstalk 上有 SyntaxError的主要内容,如果未能解决你的问题,请参考以下文章

django manage.py执行命令报错,怎么回事,求大神解救

Django中manage.py 常用命令

如何查看在 Django 的 manage.py test 命令期间运行了哪些测试

Python Django manage.py提供的命令及用法

manage.py命令

Django manage.py 命令在 ElasticBeanstalk 上有 SyntaxError