chef rails 4 ruby 2.1 rbenv capistrano отсутствует файл пассажира с общим хранилищем

#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 не будет создан. В этом проблема?