Заданию Django cron не удалось подключиться к базе данных на Elastic Beanstalk - PullRequest
0 голосов
/ 07 октября 2018

У меня на Elastic Beanstalk работает приложение django с базой данных Postgre.Приложение работает нормально и без проблем общается с базой данных.Это мои настройки базы данных,

if 'RDS_DB_NAME' in os.environ:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': os.environ['RDS_DB_NAME'],
            'USER': os.environ['RDS_USERNAME'],
            'PASSWORD': os.environ['RDS_PASSWORD'],
            'HOST': os.environ['RDS_HOSTNAME'],
            'PORT': os.environ['RDS_PORT'],
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

Однако у меня есть задание cron, которое запускается как пользовательская команда, а также необходимо записать объект в базу данных, вот пользовательская команда,

class Command(BaseCommand):
    def handle(self, *args, **options):
        sources = Source.objects.all()
        // write some data

Это файл конфигурации,

04_setup_cron:
     command: "cat .ebextensions/crontab.txt > /etc/cron.d/crontab && chmod 644 /etc/cron.d/crontab"
     leader_only: true

И вот как я устанавливаю разрешения для crontab.txt

*/15 * * * * source /opt/python/run/venv/bin/activate && cd /opt/python/current/app/
&& source /opt/python/current/env && python manage.py parse >> /var/log/cron.log 2>&1

Этот cronjob завершается ошибкой, когда я захожу в один изЭкземпляры EC2 и попытка запустить это, я получаю следующую ошибку,

conn = Database.connect(**conn_params)
django.db.utils.OperationalError: unable to open database file

Это работает локально, как мне заставить это работать на экземпляре EC2?Любая помощь приветствуется.

1 Ответ

0 голосов
/ 06 ноября 2018

Проблема может возникать из-за недоступности env-переменных.Попробуйте добавить в ваш файл crontab.txt следующую строку:

*/15 * * * * root . /opt/elasticbeanstalk/support/envvars && ... 
...