如何在部署期间播种数据?

时间:2011-04-01 20:57:03

标签: ruby-on-rails ruby

在部署期间(到共享主机),我想检查某些数据是否存储在数据库中,如果不是,我想在部署过程中插入它。谁知道怎么做我描述的?

4 个答案:

答案 0 :(得分:2)

查看rake db:seed

甚至还有一个railscast:http://railscasts.com/episodes/179-seed-data

答案 1 :(得分:0)

我个人喜欢使用灯具来填充我的数据库,无论是否正在测试。创建它们之后,您可以创建一个rake任务来重置数据库并填充它。我有这个reset_db.rake任务:

namespace :db do
  desc "Drop, create, migrate, seed the database and prepare the test database for rspec"
  task :reset_db => :environment do
    Rake::Task['db:drop'].invoke
    Rake::Task['db:create'].invoke
    Rake::Task['db:migrate'].invoke
    Rake::Task['db:fixtures:load'].invoke
    Rake::Task['db:test:prepare'].invoke
  end
end

在我的/ lib / tasks文件夹中。我用“rake db:reset_db”执行它。

答案 2 :(得分:0)

我不知道你的主机对其他数据库有多大的灵活性(不知道你是否可以为这些值创建另一个数据库),但是你可以将这些数据放在xml文档中然后有一个脚本插入这些值(如果它们不存在)。

答案 3 :(得分:0)

--- DB SEED APPROACH ---

db目录(app_root / db / seeds.rb)中有一个名为seed.rb的文件,您可以在其中添加种子数据。文件中提供了注释说明(复制如下)。

# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#
#   cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
#   Mayor.create(name: 'Emanuel', city: cities.first)

您可以填写要添加的记录,例如:

Users.create(
            :email=>"dummy", :pwd_hash=>"3x35zbb2...", 
            :pwd_salt=>'423x', :admin=>true
)

...然后运行rake db:seed将记录添加到表中。

--- 编辑迁移方法 ---

最简单的选项(虽然db:seed可能更好)是使用种子数据运行迁移。只是不得不这样做。需要具有管理员权限的种子用户,因为站点没有注册选项。下面的迁移文件:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :email
      t.string :password
      t.string :name
      t.boolean :admin
      t.integer :company_id

      t.timestamps
    end

    #create the seed user with admin priviledges
    User.create!(:email=>"dummy@dummy.com", :password=>"test", :name=>"Dummy", :admin=>true, :company_id=>0)

  end
end