12

Ho appena trasferito un'applicazione in un ambiente di produzione Heroku.ActiveRecord :: UnknownAttributeError?

Fondamentalmente c'è un modello Bus ed ha un attributo

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

seats Ora ho un frontend JavaScript che JSON di POST per i nuovi autobus per l'azione buses#create.

ActiveRecord mantiene di un errore quando si tenta di creare 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' 

I parametri stanno raggiungendo fini azione del controller. Posso accedere e ottengo il 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}} 

ho controllato che la tabella Bus ha in realtà la colonna seats e lo fa (ho eseguito questo nella console Heroku):

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

E Certo che ho provato a migrare e caricare lo schema del database. Ho controllato che anche attr_accessible :seats sia impostato correttamente.

Altre idee?

Sto eseguendo Rails 3.1.1 sullo stack Heroku Cedar. Tutto funziona bene sul mio computer locale.

risposta

10

E 'cliché, ma ho provato di nuovo la mattina e funziona perfettamente! Sospetto che potrebbe essere stato un problema di propagazione di qualche tipo.

+29

Quando ciò accade, prova un "heroku restart". Ho appena avuto questo problema dopo aver eseguito una migrazione, ma il riavvio risolve il problema. – Leito

+1

Ho provato "heroku restart" e non ha funzionato per me, quindi ho cercato su Google questo problema e ho trovato questo post e ho realizzato che "heroku restart' è impostato per default sul mio ambiente di staging. forzando la mia app di produzione: 'heroku restart --app myproductionapp' ha funzionato! – DJTripleThreat

+0

Questo deve essere stato perché hai distribuito l'app, eseguito le migrazioni. Ma l'app era già in esecuzione, quindi non ha notato le modifiche nello schema db. Cioè, dovevi [riavviare] (http://stackoverflow.com/a/15743272/52499) [it] (http://stackoverflow.com/a/20188292/52499). –

0

Prova questa

attr_reader :seats 
attr_accessor :seats 

invece di

attr_accessible :seats 
+0

Il problema sembra essersi risolto da un giorno all'altro. Potrebbe essere stato un problema di propagazione o qualcosa del genere. Grazie comunque. –

3

Ho avuto lo stesso problema con la mia app Heroku in produzione, ma non con la mia app quasi identica in staging.

Qual è stata la differenza? La mia messa in scena app aveva solo 1 web banco invece di 2.

Così ho scalato manualmente la mia produzione applicazione fino a 0 dynos web, poi di nuovo fino a 2.

BAM! Problema risolto.

1

Mi stavo strappando i capelli fino a quando non ho visto il commento di Leito sopra.

heroku restart --app staging 

risolto questo per me.

+1

non posso credere che questa sia la soluzione, ma molto sollevato grazie –