2010-04-13 4 views
1

Имея некоторые проблемы с Migrations in Sequel и мог использовать другой набор глаз. Я выполняю миграцию, которая выглядит нормально, но таблица не создается. Это определенно соединение, потому что я вижу, что была создана таблица 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

похоже, что вы должны использовать идентификаторы с уменьшенным индексом? – mikezter

+0

Вызвать, что вы видите, создается с помощью собственного сейфа таблицы Sequels. Поэтому синтаксис должен быть в порядке. Это также согласуется с только двумя учебниками, которые, кажется, существуют на эту тему ... Спасибо, но я не думаю, что это все. Я думаю, что это может быть что-то с именованием, но я не знаю, что. Невозможно найти какие-либо документы на этом. Хмм. – mikewilliamson

ответ

3

Run

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