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)
4

1 回答 1

4

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

使用匿名类而不是命名类可以降低命名空间冲突的风险。

于 2010-04-16T15:41:58.673 回答