Capistrano 3, Rails 4, конфигурация базы данных не определяет адаптер
Когда я запустил
развертывание крышек
он терпит неудачу следующим образом:
DEBUG [4ee8fa7a] Command: cd /home/deploy/myapp/releases/releases/20131025212110 && (RVM_BIN_PATH=~/.rvm/bin RAILS_ENV= ~/.rvm/bin/myapp_rake assets:precompile )
DEBUG [4ee8fa7a] rake aborted!
DEBUG [4ee8fa7a] database configuration does not specify adapter
Вы можете видеть, что "RAILS_ENV =" на самом деле пуст, и мне интересно, почему это может произойти? Я предполагаю, что это причина последней ошибки, что у меня нет конфигурации базы данных.
Файл deploy.rb находится ниже:
set :application, 'myapp'
set :repo_url, '[email protected]:developer/myapp.git'
set :branch, :master
set :deploy_to, '/home/deploy/myapp/releases'
set :scm, :git
set :devpath, "/home/deploy/myapp_development"
set :user, "deploy"
set :use_sudo, false
set :default_env, { rvm_bin_path: '~/.rvm/bin' }
set :keep_releases, 5
namespace :deploy do
desc 'Restart application'
task :restart do
on roles(:app), in: :sequence, wait: 5 do
# Your restart mechanism here, for example:
within release_path do
execute " bundle exec thin restart -O -C config/thin/production.yml"
end
end
end
after :restart, :clear_cache do
on roles(:web), in: :groups, limit: 3, wait: 10 do
within release_path do
end
end
end
after :finishing, 'deploy:cleanup'
end
database.yml:
production:
adapter: mysql2
encoding: utf8
database: myapp_production
pool: 5
username: user
password: pass
host: localhost
development:
adapter: mysql2
encoding: utf8
database: myapp_development
pool: 5
username: user
password: pass
host: localhost
Проблема будет решена, если я добавлю
set :rails_env, "production"
для моего deploy.rb, но это выглядит как hardcoding для меня, и я уверен, что там более приятное решение.
Ответы
Ответ 1
Изменить: Per этот запрос на перенос, теперь он исправлен в версии 1.1.0
от capistrano-rails
.
Per этот вопрос Github, еще одно исправление - отредактировать Capfile
. Прокомментируйте эти две строки
#require 'capistrano/rails/assets'
#require 'capistrano/rails/migrations'
и поместите эту строку в
require 'capistrano/rails'
который правильно установит вашу переменную RAILS_ENV
.
Ответ 2
Используя Cap 3 и capistrano_rails
на рельсах 4, я получал ту же ошибку; в файлах среды, которые были развернуты, я установил
set :stage, :production
set :rails_env, 'production' # even though doc says only need to do this if it different
Doc здесь: https://github.com/capistrano/rails
Ответ 3
На основе ответа Marc, который определенно кажется правильным,
вы можете обойти это до тех пор, пока оно не будет зафиксировано вверх, добавив это в ваш config/deploy.rb в блоке "пространство имен: развернуть":
desc 'Provision env before assets:precompile'
task :fix_bug_env do
set :rails_env, (fetch(:rails_env) || fetch(:stage))
end
before "deploy:assets:precompile", "deploy:fix_bug_env"
Это приведет к загрузке env и обеспечению RAILS_ENV перед активами: вызывается предварительная компиляция.
Ответ 4
Кажется, это ошибка в capistrano-rails.
Существует задача (rails.rake), которая устанавливает среду как из rails_env, так и для этапа:
namespace :deploy do
before :starting, :set_rails_env do
set :rails_env, (fetch(:rails_env) || fetch(:stage))
end
end
Но эта задача не вызывается до того, как активы будут прекомпилированы. Итак:
namespace :assets do
task :precompile do
on roles :web do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, "assets:precompile"
end
end
end
end
end
не работает, потому что rails_env равен нулю, если он не установлен явно.
Если у меня есть время, чтобы копать немного глубже, я напишу отчет об ошибке.
Ответ 5
Что произойдет, если вы добавите файл:
deploy/production.rb
С помощью этой строки:
set :stage, :production
Ответ 6
Если вы используете пассажира, вам нужно добавить
rails_env production;
на веб-сервере (например: nginx).conf, где вы указали значения для passenger_ruby
и passenger_root
.