Как вы называете db: seed в приложениях AWS Elastic Beanstalk? - программирование
Подтвердить что ты не робот

Как вы называете db: seed в приложениях AWS Elastic Beanstalk?

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

4b9b3361

Ответ 1

Ответ Кристиана близок, но вы также должны добавить:

container_commands:
  seeddb:
    command: 'export HOME=/root; rake db:seed'
    leader_only: true

Таким образом, что DB только высевается из одного экземпляра EC2, а не всех из них одновременно. В зависимости от вашего развертывания/версии EB, export HOME может быть или не понадобиться.

Ответ 2

Я использовал информацию, предоставленную по этому адресу, чтобы создать script, который будет запускать ПОСЛЕ миграции и после каждого развертывания: http://www.emind.co/how-to/how-to-run-rake-dbseed-in-amazon-elastic-beanstalk

Я предпочел этот метод, чтобы я мог отслеживать файл в экземпляре EC2. Когда я изначально развернул это на своих старых серверах (на которых выполнялся Linux 1.0 и 1.0.9), у меня не было проблем. Тем не менее, мне недавно пришлось обновить серверные машины до 64-битной версии Amazon Linux 2014.03 v1.0.9 под управлением Ruby 2.0 (Puma), а script начал сбой. Вероятно, это сработает, если вы используете разные версии Linux.

Ключ здесь /usr/local/bin/ к вашей команде rake для использования правильного рейка. Я взял это прямо из других скриптов, найденных в /opt/elasticbeanstalk/hooks/appdeploy/pre/:

#.ebextensions/db_seed.config
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/13_db_seed.sh":
    mode: "00755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      . /opt/elasticbeanstalk/containerfiles/envvars
      cd $EB_CONFIG_APP_ONDECK
      su -c "leader_only /usr/local/bin/rake db:seed" $EB_CONFIG_APP_USER ||
      echo "Rake task failed to run, skipping seeding."
      true

Следует отметить, что этот script по-прежнему неверен, так как я не запускаю "пакетный рейк-рейк", который очень рекомендуется, если вы планируете запускать любую команду rake (это запрос функции в настоящее время на AWS для других скриптов), Если вы хотите, чтобы ВСЕ скрипты выполняли exec пакета до того, как "rake" просмотрите файлы .config, размещенные здесь: https://github.com/alienfast/elastic-beanstalk p >

Если это по-прежнему не работает для вас, я предлагаю sshing одному из ваших экземпляров EC2, на котором запущено ваше приложение, или разверните новую версию с той же версией Linux/Ruby и перейдите к разделу "/opt/elasticbeanstalk/hooks/appdeploy/pre/", чтобы увидеть, что делают другие скрипты.

Я надеюсь, что другие найдут это полезным!

Ответ 3

чтобы выполнять команды на вашем экземпляре эластичного beanstalk, вы можете настроить пользовательские команды, которые будут запущены при обновлении вашего приложения. (На самом деле есть целая страница документов, посвященная различным типам команд контейнера, которые вы можете сделать).

  • Если у вас еще нет каталога .ebextensions в корне вашего приложения, создайте его.
  • будет запущен любой файл, который вы ввели здесь. назовите его, как хотите, до тех пор, пока оно заканчивается на ".config" - я произвольно назвал мой seed.config
  • заимствование из того, что пишет hfogel, вы можете добавить что-то там:

    container_commands:
      01seed:
        command: rake db:seed
    
  • добавьте этот новый код в свое репо: git add . затем git commit -m 'added seed config script', затем git push

  • затем нажмите этот новый код на ваш экземпляр aws eb: git aws.push

Чтобы убедиться, что ваша команда действительно запущена, зайдите в консоль эластичного бобового стебля и разверните детали своей среды и перейдите на вкладку logs и обновите свои журналы и просмотрите их. Внутри просто выполните ctrl + f для "семени", пока не увидите, что ваша команда семени запущена. Если вы не видите его где-то там, то он не запускался.

Ответ 4

Единственный способ, который я нашел, - это ssh в экземпляр ec2 и запустить "rake db: seed RAILS_ENV = production" вручную из/var/app/current.

Ответ 5

Прошло некоторое время с тех пор, как был задан вопрос, поэтому, возможно, вы это поняли. В любом случае вы можете добавить файл, названный (например) seed.config в папку .beanstalk. Введите что-то вроде этого, и ваши семена будут запущены:

container_commands:
  01seed:
    command: rake db:seed