12

Acabo de empujar una aplicación a un entorno de producción Heroku.ActiveRecord :: UnknownAttributeError?

Básicamente hay un modelo Bus y tiene un atributo

class Bus < ActiveRecord::Base 
    attr_accessible :seats, # other attributes 
end 

seats Ahora tengo una interfaz JavaScript, que JSON de la POST para los nuevos autobuses a la acción buses#create.

ActiveRecord mantiene encuentre un error al intentar crear un bus:

: POST www.busables.com/buses dyno=web.1 queue=0 wait=5ms service=65ms status=500 bytes=728 
: 
: ActiveRecord::UnknownAttributeError (unknown attribute: seats): 
: app/controllers/buses_controller.rb:31:in `new' 
: app/controllers/buses_controller.rb:31:in `create' 

Los parámetros están llegando a la multa acción del controlador. Puedo abrir una sesión ellos y obtener el folowing:

The bus parameters received: {"seats"=>"24", "departure_time(1i)"=>"2011", "departure_time(2i)"=>"11", "departure_time(3i)"=>"25", "departure_time(4i)"=>"16", "departure_time(5i)"=>"15", "route_attributes"=>{"summary"=>"N51", "beginning_address"=>"A place", "terminal_address"=>"Another place", "distance"=>26362, "duration"=>1753}} 

he comprobado que la tabla Bus en realidad tiene la columna de la seats y lo hace (me encontré con esto en la consola Heroku):

> Bus.column_names 
=> ["id", "name", "route_id", "created_at", "updated_at", "price", "departure_time", "trip_distance", "trip_duration", "seats"] 

Y de Por supuesto, he intentado migrar y cargar el esquema de la base de datos. Comprobé que el attr_accessible :seats también está configurado correctamente.

¿Alguna otra idea?

Estoy ejecutando Rails 3.1.1 en la pila de Cedar de Heroku. Todo funciona bien en mi máquina local.

Respuesta

10

Es un cliché pero lo intentó de nuevo en la mañana y funciona perfectamente! Sospecho que podría haber sido un problema de propagación de algún tipo.

+29

Cuando esto sucede, intente con un 'reinicio heroku'. Acabo de tener este problema después de ejecutar una migración, pero al reiniciar resuelvo el problema. – Leito

+1

Intenté 'heroku restart' y no funcionó para mí, así que busqué en Google este problema y me encontré con esta publicación y luego me di cuenta de que' heroku restart' está predeterminado en mi entorno de ensayo. forzando mi aplicación de producción por: 'heroku restart --app myproductionapp' funcionó! – DJTripleThreat

+0

Esto debe haber sido porque implementó la aplicación, ejecutó las migraciones. Pero la aplicación ya se estaba ejecutando, por lo que no notó los cambios en el esquema db. Es decir, tenía que [reiniciar] (http://stackoverflow.com/a/15743272/52499) [it] (http://stackoverflow.com/a/20188292/52499). –

0

probar este

attr_reader :seats 
attr_accessor :seats 

en lugar de

attr_accessible :seats 
+0

Parece que el problema se solucionó de la noche a la mañana. Podría haber sido un problema de propagación o algo así. Gracias de cualquier manera. –

3

Tuve el mismo problema con mi aplicación Heroku en producción, pero no con mi aplicación idéntica casi puesta en escena.

¿Cuál fue la diferencia? Mi aplicación puesta en escena sólo tenía 1 Web banco de pruebas en lugar de 2.

Así escalé manualmente mi aplicación Producción hasta 0 dinamómetros web, luego de vuelta hasta 2.

BAM! Problema resuelto.

1

Estaba tirando de mi pelo en este hasta que vi el comentario de Leito arriba.

heroku restart --app staging 

solucionó esto para mí.

+1

no puedo creer que esta sea la solución, pero muy aliviado gracias –