2016-11-10 2 views
0

У меня возникла странная проблема с Capistrano при получении готового сервера. Когда я бег cap production deploy, он всегда терпит неудачу на развёртывании: мигрировать шаг сРазвертывание производства Capistrano не выполняется при миграции, но развертывание крышки: migrate проходит

ActiveRecord :: AdapterNotSpecified: база данных «производства» не настроено. Доступно: [ "defaul ...

Тем не менее, когда я бегу cap production deploy:migrate, Capistrano успешно завершает

На фактическом сервере, я могу запустить RAILS_ENV=production bundle exec rake:migrate без каких-либо проблем, либо

Журнал Capistrano.. выплевывает ту же команду для обоих:

[развернуть: мигрировать] Запуск rake db:migrate

Моя конфигурация базы данных выглядит следующим образом:

production: 
    adapter: mysql2 
    encoding: utf8 
    database: foo 
    host: localhost 
    pool: 5 
    timeout: 5000 
    username: bar 
    password: password 
    socket: /opt/bitnami/mysql/tmp/mysql.sock 

Я должен также упомянуть, что я поставил рельсы окр в моем deploy.rb так: set :rails_env, :production

Вот Релевент информация в моей Gemfile:

gem 'mysql2', '~> 0.4.5' 
group :development do 
    gem 'capistrano', '~> 3.6', '>= 3.6.1' 
    gem 'capistrano-rvm' 
    gem 'capistrano-bundler' 
    gem 'capistrano-rails' 
    gem 'capistrano-passenger' 
end 

Может ли кто-нибудь пролить свет на то, что мне не хватает здесь? Я новичок в Capistrano.

+0

Есть ли шанс, что, когда он вытащит последний код (новая папка ...), он пытается запустить миграции до того, как будет правильно настроен файл database.yml? – Andreyy

+0

Основываясь на журнале, я не верю, что это происходит, я вижу, что он запускает команды git и т. Д. 6 шагов до миграции. – gwnp

ответ

1

После многих поисков я нашел причину.

Я не понял, что в конце процесса Capistrano создан «текущий» каталог (или символическая ссылка), и поскольку у меня был более ранний пробный запуск с RAKE_ENV = development, у меня уже была текущая символическая ссылка на сервере.

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

upload! "#{SECURE_DATA}database.yml", "#{current_path}/config/" 

Который в момент, прежде чем развернуть: перенастройки, что, к моему смущению, я думал, что rake db: migrate запускается из текущей символической ссылки, но фактически он запускался из последней версии каталога. В последнем каталоге релиза не было информации о производственной базе данных, поскольку файл был загружен в текущую символическую ссылку, которая указывала на старую версию.

В общем, моя задача выполняется причиной этой проблемы, и если кто-то попадается подобного сценария, мы эту команду вместо:

upload! "#{SECURE_DATA}database.yml", "#{release_path}/config/" 

Ключ является release_path переменной вместо переменной current_path.

Смежные вопросы