Я не понимаю, как мне обрабатывать событие «Развертывание», которое происходит при запуске экземпляра. В стеке есть два уровня (Node.js и Rails) и два приложения с разными рецептами для обработки событий Deploy. Проблема в том, что при запуске экземпляра OpsWorks пытается развернуть оба этих приложения на экземпляре и, очевидно, терпит неудачу. На данный момент рецепт развертывания выглядит так:
search('aws_opsworks_app').each do |app|
Chef::Log.info("Deploying app #{app.name}")
app_dir = '/srv/www/js_app'
application app_dir do
git app['app_source']['url'] do
revision app['app_source']['revision']
deploy_key app['app_source']['ssh_key']
end
execute 'Install dependencies' do
command 'npm install --dev'
cwd app_dir
end
execute 'Build' do
command 'npm run build'
cwd app_dir
end
npm_start
end
end
Ваш рецепт должен работать в обоих приложениях. Opsworks делает это намеренно: если экземпляр выключен и впоследствии запускается (как бы то ни было), он должен иметь возможность синхронизировать экземпляр с последними версиями любых приложений, атрибутов и т. Д., Которые требуются экземпляру для уровня, который его вводят до того, как он переводит его в онлайн.
Самое простое, что вы можете сделать, чтобы исправить свой рецепт, предполагая, что он app_dir
что вызывает у вас горе, вы можете посмотреть настройку app_dir
к чему-то уникальному для каждого приложения, например /srv/www/#{app['shortname']}
. shortname
- это подчеркнутая версия имени вашего приложения в нижнем регистре, которая подходит для создания каталога с.
Если ваши приложения различаются таким образом, что, например, одно приложение запускается npm install
а другой нет, вы можете использовать app['environment']
hash для передачи дополнительных параметров вашего приложения, которые вы затем можете использовать в своем рецепте, чтобы определить, запускается ли конкретное действие или нет. Например;
execute "Install dependencies" do
command "npm install --dev"
cwd app_dir
only_if do
app['environment'].key?('do_npm_install')
end
end
Затем перейдите в настройки своего приложения в консоли Opsworks, добавьте ключ «do_npm_install» и установите для него любое значение (неважно, что это такое, в приведенном выше примере проверяется только наличие ключа, а не его значение) , оставив другое приложение в исходном состоянии. Тогда будет запущен только execute
заблокировать для приложений, у которых есть do_npm_install
в их среде.