2016-11-09 3 views
0

В среде разработки все работает нормально, но в процессе производства (при развертывании в Heroku) это бросает мне MissingAttributeError.ActiveModel :: MissingAttributeError (не может писать неизвестный атрибут `order_id`) в процессе производства

class Order < ApplicationRecord 
    has_many :cart_items, dependent: :destroy 
end 

class CartItem < ApplicationRecord 
    belongs_to :order, optional: true, foreign_key: "order_id" 
end 

create_table "cart_items", force: :cascade do |t| 
    t.integer "item_id" 
    t.integer "cart_id" 
    t.integer "user_id" 
    t.integer "order_id" 
end 
+1

Проводили ли вы свои миграции на Heroku? Кажется, это может быть преступником. –

+0

@NickM, я сделал. Также воссоздал db на героку - тоже не работал. –

+0

Вы «git add.» И «git commit -m» добавили mig «ваша миграция, чтобы его можно было нажать на герою, а затем запустить« heroku run rake db: migrate »? – DiegoSalazar

ответ

1

при переносе на локальном хосте, схема построена, чтобы отразить ваше локальное состояние дБ, и это возможно для того, чтобы быть просто не синхронизируются с производства. Возможно, вы что-то изменили в процессе миграции, но героика все еще работает над старой версией. Независимо от того, тратит ли Heroku миграцию, определяется меткой времени в имени файла, а не содержимым миграции.

В принципе, если у вас развернутое приложение, не изменяйте старые миграции. Если вы не возражаете уничтожить все данные в производственной базе данных, запустите heroku pg:reset DATABASE, а затем rake db:migrate again. Если вы не можете удалить данные, есть еще способы исправить проблему - см. Rails rake db:migrate has no effect

Смежные вопросы