2010-09-06 13 views
14

Mi aplicación funciona perfectamente en producción, al menos en la parte del sitio web. El problema solo aparece cuando SSH en mi VPS y hago "rails c RAILS_ENV = production". La consola funciona bien en modo de desarrollo.No se puede abrir la consola de rails: la base de datos de producción no está configurada, establish_connection plantea ActiveRecord :: AdapterNotSpecified

He tenido este problema antes (o al menos uno que se parece) y lo solucioné agregando "reconnect: true" a database.yml - pero no lo solucionó esta vez. Aquí está el comienzo de la salida de error:

/home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/connection_adapters/abstract/connection_specification.rb:62:in `establish_connection': RAILS_ENV=production database is not configured (ActiveRecord::AdapterNotSpecified) 
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/connection_adapters/abstract/connection_specification.rb:55:in `establish_connection' 
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/railtie.rb:59:in `block (2 levels) in <class:Railtie>' 
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.0/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval' 
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.0/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook' 
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.0/lib/active_support/lazy_load_hooks.rb:26:in `on_load' 
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/railtie.rb:57:in `block in <class:Railtie>' 
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/initializable.rb:25:in `instance_exec' 
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/initializable.rb:25:in `run' 
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/initializable.rb:50:in `block in run_initializers' 

Y para mi configuración de base de datos de producción:

production: 
    adapter: mysql 
    encoding: utf8 
    database: tour_production 
    pool: 5 
    username: [user] 
    password: [password] 
    socket: /var/run/mysqld/mysqld.sock 
    reconnect: true 

no puedo dejar de pensar en torno a por qué funciona a través de pasajeros, pero no hubo suerte con la consola. De todos modos, estoy usando Rails 3, Ruby 1.9.2, Passenger y Nginx.

He estado haciendo algunas cosas pequeñas a través de Runner, lo cual es molesto. Me gustaría arreglar esto. Así que muchas gracias por cualquier ayuda.

Respuesta

48

Cuando usa la consola, especifica el entorno como primer argumento en lugar de como una variable de entorno. Entonces:

ruby script/console production 

cargará el entorno de producción.

Su mensaje de error es porque está buscando el entorno RAILS_ENV=production en lugar de simplemente production.

+1

Ah, eso lo haría. Parece que cada comando tiene una forma diferente de declarar el entorno de los rieles. Muchas gracias por la respuesta rápida. – Nathan

17

@Shadwell es correcto, sin embargo, si lo que busca es una sintaxis coherente puede establecer RAILS_ENV a principios de esta manera:

RAILS_ENV=production rails console 
42

Los últimos 3 rieles manera de hacer esto es simplemente:

bundle exec rails console production 
+6

En realidad, es más como: bundle exec rails consola de producción – Dogweather

+0

bundle exec rails consola de producción funciona – Hendrik

+0

Su método es mejor. Actualizado mi respuesta. –

Cuestiones relacionadas