Развертывание OpsWorks Django

Я пытаюсь развернуть приложение Django с помощью AWS OpsWorks. Я новичок в любой работе DevOps, поэтому у меня серьезные трудности.

Я пытаюсь использовать эту кулинарную книгу для автоматизации развертывания. Мне нужен Python3.4, поэтому я кое-что изменил в поваренной книге. Прямо сейчас во время хука развертывания я получаю сообщение об ошибке из следующего кода:

    # install requirements
  requirements = Helpers.django_setting(deploy, 'requirements', node)
  if requirements
    Chef::Log.info("Installing using requirements file: #{requirements}")
    pip_cmd = ::File.join(deploy["venv"], 'bin', 'pip')
    execute "#{pip_cmd} install --source=#{Dir.tmpdir} -r #{::File.join(deploy[:deploy_to], 'current', requirements)}" do
      cwd ::File.join(deploy[:deploy_to], 'current')
      user deploy[:user]
      group deploy[:group]
      environment 'HOME' => ::File.join(deploy[:deploy_to], 'shared')
    end
  else
    Chef::Log.debug("No requirements file found")
  end

Сообщение об ошибке:

STDERR: /opt/aws/opsworks/releases/20141216163306_33300020141216163306/vendor/bundle/ruby/2.0.0/gems/mixlib-shellout-1.4.0/lib/mixlib/shellout/unix.rb:147:in `chdir': No such file or directory - /srv/www/django/current (Errno::ENOENT)

Я понимаю, что этот код пытается установить требования из моего файла requirements.txt, но что случилось с каталогом tmp и каталогом current? Очевидно, что при развертывании не создается каталог current. Какова в целом файловая структура кода, загружаемого в OpsWorks из развертывания? Более того, как я могу найти исправление этой ошибки?

Я читал документацию по Chef, OpsWorks, KitchenCI, Berksfile и другим технологиям в течение нескольких дней, просто чувствуя себя заваленным всем в мире DevOps. Я просто хочу, чтобы мое приложение работало!

ИЗМЕНИТЬ

Пользовательский json:

{
    "deploy" : { 
        "django" : {
            "django_settings_template" : null,
            "django_settings_file" : "settings.py",
            "django_collect_static" : "true",
            "python_major_version" : "3.4",
            "venv_options" : "--python=$(which python3.4) --no-site-packages",
        "custom_type" : "django"
        }
    }
}

person rfj001    schedule 23.12.2014    source источник


Ответы (1)


Если текущего каталога нет, это потому, что он не был создан во время развертывания. Ваш скрипт действительно ссылается на этот каталог.

В этом блоке кода ниже у вас возникла ошибка. Если вы обратитесь к документации по блоку ресурсов выполнения https://docs.chef.io/resource_execute.html вы увидите, что если вы не предоставите команду ресурсу выполнения, то имя блока будет тем, какая команда будет выполнена. Итак, в вашем случае вы создаете путь к своей команде pip через файл Ruby.

#Mind you I'm not sure if the /tmp dir is correct, but if not it might also be the chef tmp directory
/usr/bin/pip install --source=/tmp -r /srv/www/django/current/requirements

Теперь в ресурсе у вас есть атрибут cwd, который является «текущим рабочим каталогом» или каталогом, в котором выполняется команда. Итак, когда эта команда выполняется, она выполняется в /srv/www/django/current

pip_cmd = ::File.join(deploy["venv"], 'bin', 'pip')
execute "#{pip_cmd} install --source=#{Dir.tmpdir} -r #{::File.join(deploy[:deploy_to], 'current', requirements)}" do
  cwd ::File.join(deploy[:deploy_to], 'current')
  user deploy[:user]
  group deploy[:group]
  environment 'HOME' => ::File.join(deploy[:deploy_to], 'shared')
end

Теперь, не зная немного больше о вашем развертывании, я не могу сказать вам, как это исправить, не зная немного больше о вашем развертывании. Можете ли вы опубликовать свой фактический код поваренной книги, чтобы мы могли увидеть, как вы используете эту поваренную книгу для развертывания своего кода?

{
  'deploy': {
    'django': {
                       'repository': 'Your github URL',
                       'revision': 'your revision number'
                       },
               }
}
person Stephen Carman    schedule 25.12.2014
comment
Немного покопавшись, оказалось, что мой код не развертывается в SCM. Кулинарную книгу, которую я использую, можно найти в этом репозитории: github.com /alecpm/opsworks-web-python/tree/master/ Я получаю сообщение в строке 196 в python_base_deploy.rbdefinition о том, что репозиторий scm не установлен... Однако я устанавливаю репозиторий Bitbucket для своего приложения в консоль OpsWorks, а deploy[:my_app][:scm] настроен правильно. - person rfj001; 25.12.2014
comment
@ rfj001 rfj001, так ваша установка развертывания похожа на пример использования на странице github? Вы можете опубликовать это? - person Stephen Carman; 25.12.2014
comment
Вы имеете в виду пользовательское развертывание JSON, которое я отправляю в стек? - person rfj001; 25.12.2014
comment
Да, ваш JSON, как указано в нижней части github.com/alecpm/opsworks -web-python/tree/master/ вы используете это правильно? - person Stephen Carman; 25.12.2014
comment
Вам не хватает информации о SCM. Обратитесь к примеру внизу страницы github для получения точных ключей, но я отредактирую свой пост, чтобы добавить его для вас, если вы не уверены, что я имею в виду. - person Stephen Carman; 25.12.2014