Rake прерывается из-за неопределенного метода `inet’

#ruby-on-rails #postgresql

#ruby-on-rails #postgresql

Вопрос:

Где и как я должен определить inet ? Это допустимый тип данных PostgreSQL.

http://www.postgresql.org/docs/8.4/static/datatype-net-types.html

 rake db:migrate
==  CreateSysHosts: migrating =================================================
-- create_table(:sys_hosts)
rake aborted!
An error has occurred, this and all later migrations canceled:

undefined method `inet' for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition:0x00000005e3e068>/opt/csdashboard/db/migrate/20140628123004_create_sys_hosts.rb:4:in `block in change'
  

Файл миграции:

 class CreateSysHosts < ActiveRecord::Migration
  def change
    create_table :sys_hosts do |t|
      t.inet :address
      t.string :name
      t.string :os_name
      t.string :os_flavor
      t.int :user_id
      t.string :info
      t.string :comments

      t.timestamps
    end
  end
end
  

Комментарии:

1. Можете ли вы опубликовать файл миграции?

2. обновлен вопрос с файлом миграции.

Ответ №1:

Используйте postgre_ext gem, который поддерживает расширенные типы данных Postgres, такие как inet.

Пример postgre_ext: добавление типов данных Postgres в Rails.

postgres_ext добавляет миграцию и поддержку schema.rb для следующего типа PostgresSQL:

  • INET
  • CIDR
  • MACADDR
  • UUID
  • Массивы

Комментарии:

1. Для этого потребуется обновление с 3.2.14 до 4.x, верно?

2. Я думаю, да. Или попробуйте более старую версию — rubygems.org/gems/postgres_ext/versions/1.0.0

3. Теперь я получаю неопределенный int' for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition:0x00000004c47698>/opt/csdashboard/db/migrate/20140628123004_create_sys_hosts.rb:9:in блок метода в изменении ‘

4. однако это должен быть отдельный вопрос