Команда Django manage.py, имеющая SyntaxError на ElasticBeanstalk - PullRequest
0 голосов
/ 23 января 2019

Я впервые использую AWS, и после загрузки своего проекта Django я хотел узнать, как сделать резервную копию информации БД в файл, чтобы иметь возможность изменять данные в случае, если мне нужно изменить модели моегопроект (все еще находится в стадии разработки) и продолжает иметь некоторые данные о населении.

Я думал о команде django dumpdata, поэтому, чтобы иметь возможность выполнить ее на EB через CLI, я сделал следующее (и вот где возможноЯ делаю что-то не так):

- 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

Насколько я понимаю, первая команда - просто получить доступ к SSH на Elastic Beanstalk.

Вторая - иметь права rootвнутри сервера Linux, чтобы избежать проблем при создании и открытии файлов и т. д.

Третий - просто доступ к текущему рабочему приложению.

И последняя команда, которую я должен использоватьвыгрузить все данные, «дружественные человеку» без ограничений, чтобы иметь возможность использовать их в любой другой новой базе данных.

Я должен сказать, что я пробовал эту последнююmmand на моей локальной машине и работал как ожидалось без каких-либо ошибок или предупреждений.

Итак, проблема, с которой я здесь сталкиваюсь, заключается в том, что при выполнении этой последней команды я получаю следующую ошибку:

  File "manage.py", line 14
    ) from exc
         ^
SyntaxError: invalid syntax

Также я попытался пропустить sudo -s, чтобы просто использовать разрешения пользователя, которого я использую для входа в систему по ssh, но получил: -bash: project_dump.json: Permission denied.Вот почему я подумал, что здесь поможет команда sudo.

Кроме того, я следовал этому известному учебнику для развертывания Django + PostgreSQL на EB, поэтому пользовательЯ использую для доступа к ssh один в группе с AdministratorAccess разрешениями.

Прежде чем пытаться все это, я также искал способ получить эту информацию непосредственно из AWS-RDS, но я нашел только способ восстановления резервной копии, но без возможности изменения содержимого вручную, поэтому это не то, что мне действительно нужно.

1 Ответ

0 голосов
/ 23 января 2019

Как и в вашей локальной среде, вам нужно запустить свои команды manage.py внутри вашего правильного python virtualenv и убедиться, что установлены переменные среды, такие как RDS_USERNAME и RDS_PASSWORD. Для этого вам необходимо:

  1. Активируйте свой virtualenv
  2. Источник ваших переменных окружения

Как описано в конце упомянутого вами урока, вот как это сделать:

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

И вы должны делать это каждый раз, когда входите в машину.

Примечание: причина, по которой вы получаете ошибку отказа в разрешении, заключается в том, что когда вы перенаправляете вывод dumpdata в project_dump.json , вы пытаетесь записать в сам каталог приложения. Не хорошая идея. Попробуйте подключиться к > ~/project_dump.json (ваш домашний каталог), тогда sudo не понадобится.

...