2016-05-10 33 views
1

我的應用在生產環境中工作正常,但是當我轉移到生產並運行'heroku run rake db:migrate'時,我收到以下錯誤:Heroku/Rails:PG :: Undefined Table:error「[tablename]」在heroku rails遷移中不存在

PG::UndefinedTable: ERROR: table "applications" does not exist 
    Migrating to DropApplications (20160509013805) 
     (0.8ms) BEGIN 
    == 20160509013805 DropApplications: migrating    ================================= 
    -- drop_table(:applications) 
     (1.1ms) DROP TABLE "applications" 
     (0.5ms) ROLLBACK 
    rake aborted! 
    StandardError: An error has occurred, this and all later migrations canceled: 

    PG::UndefinedTable: ERROR: table "applications" does not exist 
    : DROP TABLE "applications" 

但是,在我的數據庫中有一個'應用程序'表。當我放棄,然後在前一天重新制作應用程序腳手架時,這個下降可能與此有關。我該如何解決?

 create_table "applications", force: :cascade do |t| 
t.string "name" 
t.string "gender" 
t.date  "date_of_birth" 
t.string "gpa" 
t.text  "essay" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
     end 

所以,當我運行運行rake:DB設置,我看到了以下結果:

 Status Migration ID Migration Name 
    -------------------------------------------------- 
     up  20160505200754 ********** NO FILE ********** 
     up  20160508234634 Create users 
     up  20160508234945 Add devise to users 
     up  20160509013805 ********** NO FILE ********** 
     up  20160509014328 ********** NO FILE ********** 
     20160509014911 Create applications 

兩個「創建應用程序,」我試圖刪除之前。因此,我嘗試耙一下heroku數據庫,如下所示:$ heroku run rake --trace db:migrate VERSION = 20151127134901但我仍然遇到「drop tables」的錯誤 - 嘗試執行20160509013805遷移。我如何在沒有文件的地方完全刪除這些遷移,因此它不會嘗試掠過這些遷移?先謝謝你。

+1

對此有幫助嗎? http://stackoverflow.com/a/34321825/981616 – uday

+0

這有助於我,並把我放在正確的軌道上......我想。我只是更新了原來的帖子,如果你可以 –

+0

添加了答案,請檢查並讓我知道。 – uday

回答

4

您的遷移文件可能存在問題。如果您刪除了一個,但另一個相應的文件仍然存在,則可能導致此錯誤。我會評論,但我還沒有名聲。

+0

查看我原來的帖子我剛更新了 –

+0

那些是孤兒遷徙。爲了解決這個問題,你可以刪除你的'db/migrate /'文件夾(不要刪除schema.rb)並運行'rake db:schema:load'或'rake db:setup'。 或者有一個寶石,但我從來沒有嘗試過:https://github.com/jalkoby/squasher 你也可以檢查這個SO問題:http://stackoverflow.com/questions/16041790/what-is-the-最佳方式解決問題 - 孤立遷移 – Yimanei

+0

實際上,您的孤立遷移問題現在已解決。但是你沒有一個有權創建數據庫的用戶。 PG未正確設置,無法繼續。 根據你的環境,這是一個常見的問題,你可能需要提供你的用戶名和密碼(隱藏在環境變量中)到'database.yml'。 請參閱http://stackoverflow.com/questions/11919391/postgresql-error-fatal-role-username-does-not-exist?rq=1和http://stackoverflow.com/questions/17633422/psql-fatal-對於解決方案示例,數據庫用戶不存在?rq = 1。 – Yimanei

1

重置heroku db:

Heroku不允許丟棄db。相反,你應該做heroku pg:reset。這個命令需要你指定可以通過heroku pg:info,被找到的數據庫,那麼你會得到類似下面的輸出:一旦你的輸出

=== DATABASE_URL 
Plan:  Hobby-dev 
Status:  Available 
Connections: 0/20 
PG Version: 9.4.4 
Created:  2015-10-11 23:14 UTC 
Data Size: 6.7 MB 
Tables:  5 
Rows:  0/10000 (In compliance) 
Fork/Follow: Unsupported 
Rollback: Unsupported 
Add-on:  postgresql-cubed-1838 

像上面使用Heroku的PG:重置與附加的「添加 - 命令在「字段值。示例我會這樣做:

$ heroku pg:reset postgresql-cubed-1838