2010-04-13 96 views
1

在續集遷移中遇到了一些麻煩,並可能使用另一組眼睛。 我運行的遷移看起來不錯,但沒有創建表。這是肯定連接,因爲我可以看到schema_info表已被創建。 -M 0/1會根據您的預期更改版本,但仍然沒有表格。續集遷移無法運行?

的命令:

sequel -m . -M 1 ~/Desktop/dbtest/testdb.yml 

001_testdb.rb:

class TestDb < Sequel::Migration 
    def up 
    create_table("terminals") do 
     primary_key :id 
     Integer :location_id 
     Integer :merchant_id 
     BigDecimal :terminal_id, :size=>[11, 0] 
     String :reference, :size=>255 
     DateTime :created_at 
     DateTime :updated_at 
     String :image, :default=>"default.jpg", :size=>255 
    end 
end 
    def down 
    drop_table :terminals 
    end 
end 

在Postgres的輸出:

test_db=# \dt 
     List of relations 
Schema | Name  | Type | Owner 
--------+-------------+-------+---------- 
public | schema_info | table | postgres 
(1 row) 

test_db=# select * from schema_info; 
version 
--------- 
    1 
(1 row) 
+0

好像你應該使用downcased標識符? – mikezter 2010-04-14 12:30:55

+0

你在那裏看到的def是使用續集自己的錶轉儲創建的。所以語法應該沒問題。它也同意這個主題上似乎只存在的兩個教程...謝謝,但我不認爲就是這樣。我認爲這可能與命名有關,但我不知道是什麼。無法找到任何文檔。哎呀。 – mikewilliamson 2010-04-15 04:34:21

回答

3

運行

sequel -m . -E > ~/Desktop/dbtest/testdb.yml 

-E添加一個記錄器,以便您可以看到實際發生的情況,並將輸出重定向到testdb.yml日誌文件中。如果這是您的第一次遷移,您可能需要刪除數據庫並重新創建它(或至少是schema_info表)。顯然你必須在-m目錄下進行遷移。上班。

我還建議以下語法遷移類:

Class.new(Sequel::Migration) do 
    def up 
    create_table(:terminals) do 
     primary_key :id 
     Integer :location_id 
     Integer :merchant_id 
     BigDecimal :terminal_id, :size=>[11, 0] 
     String :reference, :size=>255 
     DateTime :created_at 
     DateTime :updated_at 
     String :image, :default=>"default.jpg", :size=>255 
    end 
    end 
    def down 
    drop_table :terminals 
    end 
end 

使用匿名類而不是命名類減少了命名空間衝突的風險。

+1

請注意,最近更好的匿名遷移是通過'Sequel.migration do ... end'完成的。有關更多信息,請參閱[遷移文檔](http://sequel.rubyforge.org/rdoc/files/doc/migration_rdoc.html)。 – Phrogz 2012-01-29 03:20:13