2015-11-09 62 views
1

這個問題讓我難堪。Heroku Rails - ActiveRecord :: UnknownAttributeError(未知屬性'user_id'的時間表。):

當部署到Heroku上我得到了錯誤,但沒有在本地這將指示與DB

線的參照

class StaticPagesController < ApplicationController 

    def home 

    if logged_in? 
     @project = current_user.projects.build if logged_in? 
     **@timetable = current_user.timetables.build if logged_in?** 
     @feed_items = current_user.feed.paginate(page: params[:page]).reorder("project_due_date ASC") 
     @feed_items3 = current_user.feed3.paginate(page: params[:page], :per_page => 1) 
    end 
    end 

我已經試過

Heroku run db:migrate and Heroku restart 

還是個問題相同的錯誤

這可能是事實,我有模式錯了某些BU什麼時候會影響Heroku而不是本地主機?

URL = https://radiant-sea-5676.herokuapp.com/

編輯 - 這似乎在登錄狀態下,當沒有登錄在Heroku,但崩潰上班工作在本地主機上任何一種方式。

再次編輯 - 通過Heroku檢查模式顯示,即使在遷移後,用戶iD也沒有用戶iD列和索引設置。

create_table "timetables", force: :cascade do |t| 
    t.string "name",  limit: 255 
    t.string "attachment", limit: 255 
    t.datetime "created_at",    null: false 
    t.datetime "updated_at",    null: false 
    end 

回答

1

直到有人提供了更好的解釋或回答我所要做的是去Heroku儀表板並刪除ClearDB數據庫,然後創建一個新的。

我配置的應用程序與

heroku config | grep CLEARDB_DATABASE_URL 

heroku config:set DATABASE_URL='mysql://adffdadf2341:[email protected]/heroku_db?reconnect=true' 

然後跑了Heroku的運行耙分貝:遷移並使用了正確的架構,包括外鍵重建數據庫。

1

忽略我最後的答案,我在登錄到您的網站並訪問時間表頁面時看到了問題。

您的模式可能會損壞,這可能會不時發生,特別是如果您在運行後更改遷移。

嘗試以下操作:

  • 在本地主機上,刪除你的模式,減少您的數據庫,並在本地主機上再次
  • 遷移,從瀏覽器中刪除所有Cookie或嘗試使用另外一個,因爲它是可能的舊Cookie被掩蓋的問題
  • 在Heroku上,你推新的架構,運行heroku pg:reset DATABASE --confirm name-of-your-app比耙分貝後:再次遷移

希望這有助於

重要的是要弄清楚爲什麼會發生這種情況,所以您可以建議您在運行後是否修改了任何遷移?我學會了你不能那樣做的艱難方式!

+0

Localhost正常工作。其實enver有一個問題,但當我檢查使用Heroku的Heroku上的Schema運行「bundle exec rake db:schema:dump && cat db/schema.rb」其缺少的add_index「時間表」,[「user_id」],名稱:「 index_timetables_on_user_id「,使用::btree ...它的項目。項目來自哪裏?它看起來它的自動生成爲沒有user_id參數的項目,但有東西添加它 – ChrisM

+0

架構的Pastebin http://pastebin.com/1DJF69Zr。請注意,在時間表和關於外鍵的最後一行之後索引行是如何丟失的。 – ChrisM

+0

從Heroku中刪除ClearDB應用程序,建立一個新的。將「heroku config:set DATABASE_URL =」更改爲新的ClearDB。在這之後,Heroku運行rake:遷移正確處理並插入正確的外鍵。本地Command rake db:reset似乎是解決方案,但在使用ClearDB時,該命令在Heroky上不起作用。 – ChrisM

0

找到一個很好的解決方案,當架構不同步時,但它需要銷燬數據庫並建立一個乾淨的。重置數據庫使模式保持原樣,因此沒有用處。

  1. 本地運行rake db:drop db:create db:migrate db:schema:dump db:setup並將所有架構更改推送到heroku。
  2. 重新啓動您的dynos通過heroku restart這將削減所有數據庫連接,所以你不會遇到問題。您也可以切換到維護模式。
  3. 運行heroku run 'rake db:drop db:create db:migrate db:schema:dump db:setup'

這有點怪異,但基本上對數據庫執行硬重置。您可能不需要運行最後兩條命令。

相關問題