Роли Rails3 capistrano, postgresql и развертывание ресурсов

#postgresql #ruby-on-rails-3.2 #capistrano #asset-pipeline

#postgresql #ruby-on-rails-3.2 #capistrano #ресурс-конвейер

Вопрос:

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

 load 'deploy'
    # load 'deploy/assets'
load 'config/deploy' 
  

генерирует откат, поскольку процесс capistrano создает файл манифеста

 bundle exec rake RAILS_ENV=development RAILS_GROUPS=assets assets:precompile amp;amp; cp -- /Users/stageUser/v4/shared/assets/manifest.yml /Users/stageUser/v4/releases/20140623054425/assets_manifest.yml"
  

он обнаруживает ошибку

  ** [out :: ip] rake aborted!
 ** [out :: ip] FATAL:  role "localhostUser" does not exist
 ** [out :: ip] /Users/stageUser/v4/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.18/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `initialize'
 ** [out :: ip] /Users/stageUser/v4/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.18/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `new'
 ** [out :: ip] /Users/stageUser/v4/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.18/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `connect'
 ** [out :: ip] /Users/stageUser/v4/shared/bundle/ruby/1.9.1/
  

localhostUser нигде не вызывается на промежуточном сервере, ни в deploy.rb, ни в Capfile. Он определен только для разработки и использования тестовой базы данных на localhost. ошибка явно возникает через postgresql_adapter.rb

странность обновления. Ссылка на ошибку закрытия гласит:

 failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell '1.9.3@v4'
  

версия ruby 1.9.3 … по сравнению с путем к пакету для ruby в версии 1.9.1 … хммм. может ли это быть связано?
завершение обновления

Что такое postgresql_adapter, вызываемый deploy / assets . Единственной подсказкой является файл manifests.yml, который может быть прочитан как инициализатор базы данных… эта строка вызывает ‘connection_parameters’, но тогда почему он использует localhostUser, когда stageServer не знает об этом?

имена пользователей database.yml определяются по-разному между localhost и промежуточным сервером, но я не могу понять, почему это повлияет на capfile.

Как я могу убедиться, что роль установлена правильно?

Ответ №1:

Далее следует исправление, но не правильный ответ на проблему.

Все это связано с postgresql и его ролями. Мой файл database.yml -файл .gitignore (d) У меня были разные значения для имени пользователя (или «роли» для postgresql)

 sudo su localhostUser
  

который не был postgre (немного усложняет ситуацию, переводя меня в другой кластер)

 createuser stageUser
  

Я признаю, что я не уверен, является ли это необходимой частью решения, но WT … играть безопасно

Затем последовательно:

 pg_dump app_development > mydb.sql
rake db:migrate VERSION=0
  

измените имя пользователя в файле database.yml с localhostUser на stageUser

 rake db:migrate
  

отредактируйте mydb.sql, заменив строку localhostUser на stageUser

 psql app_development < mydb.sql
  

теперь выполняется развертывание.

Это подтверждает, что задача использует НЕ данные database.yml промежуточного сервера, а некоторый кэш с локального хоста. не то, что я ожидал