2012-01-29 43 views
1

我有一個使用Rails 3.1和Postgres 9.0的工作設置,只是將升級的Rails升級到3.2.1和Postgres 9.1.2。升級Postgres和Rails後,我無法讓我的遷移回到正軌

升級postgres意味着遷移數據爲2個版本的數據存儲不兼容。無論如何,我並不在乎遷移本地數據庫中的數據,因爲它們都用於開發目的。所以我試圖用Rails遷移(或w/schema)重新創建我的數據庫。然而,無論我嘗試什麼,我都無法讓遷移運行。

無論使用

rake db:migrate 

rake db:reset 

與我的Postgres運行此9.1.2設置給了我:

spif: > rake db:migrate 
rake aborted! 
PG::Error: ERROR: relation "users" does not exist 
LINE 4:    WHERE a.attrelid = '"users"'::regclass 
             ^
:    SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull 
       FROM pg_attribute a LEFT JOIN pg_attrdef d 
       ON a.attrelid = d.adrelid AND a.attnum = d.adnum 
      WHERE a.attrelid = '"users"'::regclass 
       AND a.attnum > 0 AND NOT a.attisdropped 
      ORDER BY a.attnum 

Tasks: TOP => db:migrate => environment 
(See full trace by running task with --trace) 

起初,我雖然它可能是, pg gem不支持Rails 3.2.1,所以用sqlite3也是如此,但是這給我找不到相同的用戶:

spif: > rake db:reset 
rake aborted! 
Could not find table 'users' 

所以它看起來像Rails預計的用戶表的地方。

  1. 我不知道如何找出什麼代碼實際上調用了這個。當我使用--trace運行遷移命令時,顯示的是ActiveRecord內部進行的操作。這可能是ActiveRecord 3.2.1中的一個錯誤(我將如何去發現它?)。

  2. 我可以使用psql和config/database.yml中的用戶設置連接到pg db的正常狀態。 rails會期望一些可以查詢用戶的postgres表嗎?

  3. 我已經完全刪除了我的db/migrate目錄和db/schema.rb以確保在那裏沒有一些奇怪的內部依賴關係,但也無濟於事。

我敢肯定,我錯過了一些簡單的概念 - 我還沒有嘗試過經常到我的分貝從頭開始復位,所以我希望有一個簡單的解釋。

非常感謝,非常感謝。

+0

你有用戶模型嗎? – 2012-01-29 18:49:55

+0

是的,但是它在遷移中,所以應該運行... – 2012-01-30 08:07:59

+1

你有什麼可以嘗試在Rails初始化期間預加載User類,以及*遷移之前有沒有機會運行。 ActiveAdmin過去一直是類似情況的嫌疑犯。 – 2012-01-30 09:33:38

回答

1

我通過手動創建用戶表和對方表我在這個項目解決了這個。然後再次運行遷移,一切安裝正常。只有幾張桌子,所以它不是太麻煩,但不是我試圖找到的「修復」。

看起來像'mu太短'是正確的,這與ActiveAdmin以及在任何數據庫操作(或rails服務器/控制檯)中加載環境時加載本身的方式有關。

感謝您的指點畝。

+0

有這個完全相同的問題。我剛剛創建了「用戶」表(甚至沒有創建任何字段),並且它工作得很好(rake db:reset和rake db:migrate) – 2012-08-14 20:35:28

0

您是否在初始化器中使用任何模型加載? 我有同樣的問題,我在初始化程序中加載模型,所以錯誤來了,因爲在遷移之前表並不存在,我試圖加載一些不存在的東西!

相關問題