当前位置:  开发笔记 > 后端 > 正文

如何(以及是否)使用初始数据填充rails应用程序

如何解决《如何(以及是否)使用初始数据填充rails应用程序》经验,为你挑选了5个好方法。

我有一个用户必须登录的rails应用程序.因此,为了使应用程序可用,系统中必须有一个初始用户才能登录第一个人(然后他们可以创建后续用户).到目前为止,我已经使用迁移将特殊用户添加到数据库中.

在提出这个问题后,似乎我应该使用db:schema:load,而不是运行迁移,在新的开发机器上设置新的数据库.不幸的是,这似乎不包括插入数据的迁移,只包括设置表,密钥等的迁移.

我的问题是,处理这种情况的最佳方法是什么:

    有没有办法让d:s:l包含数据插入迁移?

    我根本不应该使用迁移来以这种方式插入数据吗?

    我是否应该根据数据预先填充数据库?我应该更新应用程序代码,以便它处理没有用户优雅的情况,并允许从应用程序内实时创建初始用户帐户吗?

    还有其他选择吗?:)

Aaron Wheele.. 46

尝试rake任务.例如:

    创建文件/lib/tasks/bootstrap.rake

    在文件中,添加任务以创建默认用户:

    namespace :bootstrap do
      desc "Add the default user"
      task :default_user => :environment do
        User.create( :name => 'default', :password => 'password' )
      end

      desc "Create the default comment"
      task :default_comment => :environment do
        Comment.create( :title => 'Title', :body => 'First post!' )
      end

      desc "Run all bootstrapping tasks"
      task :all => [:default_user, :default_comment]
    end

    然后,当您第一次设置应用程序时,您可以执行rake db:migrate或rake db:schema:load,然后执行rake bootstrap:all.

我很确定他在谈论你的应用程序的/ lib目录. (9认同)


Jason Kim.. 35

db/seed.rb在每个Rails应用程序中找到使用.

虽然上面从2008年给出的一些答案可以很好地运行,但它们已经过时了,它们不再是Rails惯例了.

将初始数据填充到数据库中应该使用db/seed.rb文件完成.

它就像一个Ruby文件.

要创建和保存对象,您可以执行以下操作:

User.create(:username => "moot", :description => "king of /b/")

准备好此文件后,您可以执行以下操作

rake db:migrate

rake db:seed

或者一步到位

rake db:setup

您的数据库应填充您想在seed.rb中创建的任何对象



1> Aaron Wheele..:

尝试rake任务.例如:

    创建文件/lib/tasks/bootstrap.rake

    在文件中,添加任务以创建默认用户:

    namespace :bootstrap do
      desc "Add the default user"
      task :default_user => :environment do
        User.create( :name => 'default', :password => 'password' )
      end

      desc "Create the default comment"
      task :default_comment => :environment do
        Comment.create( :title => 'Title', :body => 'First post!' )
      end

      desc "Run all bootstrapping tasks"
      task :all => [:default_user, :default_comment]
    end

    然后,当您第一次设置应用程序时,您可以执行rake db:migrate或rake db:schema:load,然后执行rake bootstrap:all.


我很确定他在谈论你的应用程序的/ lib目录.

2> Jason Kim..:

db/seed.rb在每个Rails应用程序中找到使用.

虽然上面从2008年给出的一些答案可以很好地运行,但它们已经过时了,它们不再是Rails惯例了.

将初始数据填充到数据库中应该使用db/seed.rb文件完成.

它就像一个Ruby文件.

要创建和保存对象,您可以执行以下操作:

User.create(:username => "moot", :description => "king of /b/")

准备好此文件后,您可以执行以下操作

rake db:migrate

rake db:seed

或者一步到位

rake db:setup

您的数据库应填充您想在seed.rb中创建的任何对象



3> Jay Stramel..:

我建议您不要在迁移中插入任何数据.而是仅修改迁移中的现有数据.

为了插入初始数据,我建议你使用YML.在我设置的每个Rails项目中,我在DB目录下创建一个fixtures目录.然后我为初始数据创建YML文件,就像YML文件用于测试数据一样.然后我添加一个新任务来加载YML文件中的数据.

LIB /任务/ db.rake:

namespace :db do
  desc "This loads the development data."
  task :seed => :environment do
    require 'active_record/fixtures'
    Dir.glob(RAILS_ROOT + '/db/fixtures/*.yml').each do |file|
      base_name = File.basename(file, '.*')
      say "Loading #{base_name}..."
      Fixtures.create_fixtures('db/fixtures', base_name)
    end
  end

  desc "This drops the db, builds the db, and seeds the data."
  task :reseed => [:environment, 'db:reset', 'db:seed']
end

DB /夹具/ users.yml里:

test:
  customer_id: 1
  name: "Test Guy"
  email: "test@example.com"
  hashed_password: "656fc0b1c1d1681840816c68e1640f640c6ded12"
  salt: "188227600.754087929365988"



4> 小智..:

这是我最喜欢的解决方案,使用populator和faker宝石:

http://railscasts.com/episodes/126-populating-a-database



5> DEfusion..:

尝试使用seed-fu插件,这是一个非常简单的插件,允许您播种数据(并在将来更改种子数据),还可以让您为所有环境播放特定于环境的数据和数据.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有