种子Rails数据库(MySQL)来自TSV文件

时间:2015-08-12 17:21:10

标签: mysql ruby-on-rails database macos rake

在开发我的Rails应用程序时,我一直在手动为其数据库添加样本数据。但是,在我运行rake db:migrate:reset之后,我需要重新播种所有内容,这很乏味。

如何让rake为我种下数据库?

在此迁移中生成相关模型:

class CreateKeyRecords < ActiveRecord::Migration
  def change
    create_table :key_records, :id => false do |t|
      t.string :name
      t.integer :parentID, :limit => 8
      t.primary_key :ID
      t.integer :accesses, :limit => 8
      t.integer :dt
      t.integer :hour
    end
    change_column :key_records, :ID, 'bigint'
  end
end

目前,我正在使用以下命令直接修改mysql中应用程序的数据库来播种数据库:

LOAD DATA LOCAL INFILE '/tmp/input.tsv' INTO TABLE key_records (name, parentID, ID, accesses) SET dt=20141231, hour=23;

其中input.tsv的格式为:

key   1    2    9493878

我怎么可以为我做“手动播种”?

1 个答案:

答案 0 :(得分:2)

我不认为这样做有“rails-ey”方式,但您应该能够在seeds.rb中运行SQL语句。您可以使用ActiveRecord::Base.connection.execute对数据库运行原始SQL语句。你的种子文件看起来像这样:

stmt = "LOAD DATA LOCAL INFILE '/tmp/input.tsv' 
    INTO TABLE key_records (name, parentID, ID, accesses) 
    SET dt=20141231, hour=23;"

ActiveRecord::Base.connection.execute stmt

然后您可以使用rake db:seed调用它。