#ruby-on-rails #ruby #capistrano #passenger #chef-infra
#ruby-on-rails #ruby #capistrano #пассажир #шеф-повар-инфра
Вопрос:
Мы относительно новички в использовании chef для развертывания наших приложений. В настоящее время странная проблема, с которой мы сталкиваемся и для которой еще предстоит найти решение, связана с нашим bin/passenger
файлом конфигурации. По какой-то причине, когда сервер создается с помощью chef, он не существует или chef его не создает. Возможно, capistrano не создает его… Мы немного ошарашены этим.
Как вы можете видеть из прикрепленного изображения, мы знаем, что файла там нет. Все наши текущие сценарии соответствуют 4 другим серверам, которые успешно запущены, но по какой-то причине эта новая сборка не создаст файл. Или TBH, мы полностью пропускаем некоторые шаги. Было несколько очень долгих ночей, когда я пытался это сделать.
Мы использовали chef для сборки сервера, и мы используем capistrano для развертывания в box
У кого-нибудь есть какие-либо мысли? Нужна дополнительная информация? Указатели?
Наш текущий config/deploy.rb
файл:
set :application, 'digest'
set :scm, :git
set :repo_url, '{omitted private repo}'
set :branch, 'experiment/cap'
set :deploy_to, '/home/apps/api'
set :deploy_via, :remote_cache
set :user, 'deploy'
set :use_sudo, false
set :rbenv_type, :system
set :rbenv_ruby, '2.1.0'
set :rbenv_path, '/opt/rbenv'
namespace :deploy do
desc 'Restart application'
task :restart do
on roles(:app), in: :sequence, wait: 5 do
execute "mkdir -p #{release_path}/tmp ; touch #{release_path}/tmp/restart.txt"
end
end
desc 'Create application symlinks'
task :symlinks do
on roles(:app), in: :sequence, wait: 5 do
execute "rm #{release_path}/config/database.yml"
execute "ln -s #{shared_path}/config/database.yml #{release_path}/config/database.yml"
execute "ln -s #{shared_path}/config/secrets.yml #{release_path}/config/secrets.yml"
execute "ln -s #{shared_path}/bin/passenger #{release_path}/bin/passenger"
end
end
after :finishing, 'deploy:cleanup'
after 'deploy:updated', 'deploy:symlinks'
end
namespace :setup do
desc 'Copy the secrets.yml and database.yml files'
task config: [ 'config/secrets.yml', 'config/database.yml' ] do |t|
on roles(:all) do
execute "mkdir -p #{shared_path}/config"
t.prerequisites.each do |file|
upload! file, "#{shared_path}/config"
end
end
end
end
В нашем config/deploy/staging.rb
файле:
set :stage, :staging
# Simple Role Syntax
# ==================
# Supports bulk-adding hosts to roles, the primary
# server in each group is considered to be the first
# unless any hosts have the primary property set.
role :app, %w{deploy@208.94.36.146}
role :web, %w{deploy@208.94.36.146}
set :rails_env, "staging"
Папка нашего промежуточного сервера bin:
Вы можете видеть, что приложение переходит в окно с настройкой текущих выпусков:
Наше текущее приложение на сервере:
Наш текущий config
каталог приложений:
Комментарии:
1. Я немного смущен. Используете ли вы Chef для развертывания или cap?
2. @coderanger Я только что обновил, чтобы сделать это более понятным. Мы использовали chef для сборки сервера и использовали cap для развертывания в box.
Ответ №1:
Я предполагаю, что passenger отсутствует в Gemfile, что приведет к тому, что binstub не будет создан. В этом проблема?