ruby-on-rails - rails - gem capistrano
Capistrano 3, Rails 4, la configuraciĆ³n de la base de datos no especifica el adaptador (6)
Cuando comienzo
producción de la tapa de despliegue
falla así:
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
Puedes ver que "RAILS_ENV =" está realmente vacío y me pregunto por qué podría estar pasando eso. Supongo que este es el motivo de este último error porque no tengo una configuración de base de datos.
El archivo deploy.rb está debajo:
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
El problema se resuelve si agrego
set :rails_env, "production"
para mi deploy.rb, pero esto me parece una codificación y estoy seguro de que hay una solución mejor.
¿Qué pasa si añades un archivo?
deploy/production.rb
Con esta línea:
set :stage, :production
Basado en la respuesta de Marc, que definitivamente parece ser la correcta,
puede solucionar esto hasta que se arregle en sentido ascendente agregando esto a su config / deploy.rb en el bloque "namespace: deploy":
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"
Esto forzará la carga de env y la provisión de RAILS_ENV antes de los activos: se llama a la precompilación.
Edición: según esta solicitud de extracción , ahora está arreglada en la versión 1.1.0
de capistrano-rails
.
Por este problema de Github , otra solución es editar tu Capfile
. Comenta estas dos líneas
#require ''capistrano/rails/assets'' #require ''capistrano/rails/migrations''
y poner esta linea en
require ''capistrano/rails''
que establecerá correctamente su variable RAILS_ENV
.
Parece ser un error en los carriles capistrano.
Hay una tarea (rails.rake) que configura el entorno desde rails_env o stage:
namespace :deploy do
before :starting, :set_rails_env do
set :rails_env, (fetch(:rails_env) || fetch(:stage))
end
end
Pero esta tarea no se llama antes, es decir, los activos: precompilación. Así que esto:
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
falla porque rails_env es nil si no está configurado explícitamente.
Si tengo tiempo para profundizar un poco más, presentaré un informe de error.
Si está utilizando pasajeros, necesita agregar
rails_env production;
en el servidor web (por ejemplo: nginx) .conf donde ha especificado valores para passenger_ruby
y passenger_root
.
Usando Cap 3 y capistrano_rails
en los rieles 4 recibí el mismo error; en el archivo (s) de entorno que se está desplegando, establezco
set :stage, :production
set :rails_env, ''production'' # even though doc says only need to do this if it''s different
Doc aquí: https://github.com/capistrano/rails