it-swarm-ko.tech

초기 데이터로 Rails 응용 프로그램을 채우는 방법 (및 여부))

사용자가 로그인해야하는 Rails 응용 프로그램이 있습니다. 따라서 응용 프로그램을 사용하려면 첫 번째 사용자가 로그인 할 수있는 최초 사용자가 시스템에 있어야합니다. (그런 다음 후속 사용자를 만들 수 있습니다.) 지금까지는 마이그레이션을 사용하여 데이터베이스에 특수 사용자를 추가했습니다.

this question 을 묻은 후에는 마이그레이션을 실행하는 대신 db : schema : load를 사용하여 새 개발 시스템에 새로운 데이터베이스를 설정해야합니다. 불행히도 여기에는 데이터를 삽입하는 마이그레이션은 포함되지 않으며 테이블, 키 등을 설정하는 마이그레이션 만 포함됩니다.

내 질문은이 상황을 처리하는 가장 좋은 방법은 무엇입니까?

  1. 데이터 삽입 마이그레이션을 포함하기 위해 d : s : l을 얻는 방법이 있습니까?
  2. 이런 식으로 데이터를 삽입하기 위해 마이그레이션을 전혀 사용하지 않아야합니까?
  3. 데이터베이스에 데이터를 전혀 채우지 않아야합니까? 사용자가없는 경우를 처리하고 응용 프로그램 내에서 초기 사용자 계정을 실시간으로 만들 수 있도록 응용 프로그램 코드를 업데이트해야합니까?
  4. 다른 옵션이 있습니까? :)
61
Luke Halliwell

나는이 질문에 대한 위대한 대답 중 일부를 내 자신의 생각과 함께 요약해서 읽었습니다.

여기에는 두 가지 뚜렷한 문제가 있습니다.

  1. 특별한 'admin'사용자로 데이터베이스를 미리 채워야합니까? 또는 응용 프로그램을 처음 사용할 때 설정하는 방법을 제공해야합니까?
  2. 데이터베이스로 데이터를 어떻게 미리 채우나요? 1 부에 대한 답변에 관계없이 유효한 질문입니다. 관리자가 아닌 다른 사용자를위한 사전 사용 시나리오가 있습니다.

(1)의 경우 응용 프로그램 자체에서 첫 번째 사용자를 설정하는 것은 정의에 의해 거의 사용되지 않는 기능에 대한 추가 작업입니다. 그러나 사용자가 원하는 비밀번호를 설정하도록 강요하기 때문에 약간 더 안전 할 수 있습니다. 가장 좋은 해결책은이 두 가지 극단 사이에 있습니다. 초기 사용자를 설정하는 스크립트 (또는 레이크 작업 등)가 있습니다. 그런 다음 개발 중에 기본 비밀번호를 사용하여 자동으로 채우고 프로덕션 설치/배포 중에 비밀번호를 입력하도록 스크립트를 설정할 수 있습니다 (관리자의 기본 비밀번호를 사용하지 않으려는 경우).

(2)의 경우 여러 가지 유효한 솔루션이있는 것으로 보입니다. 갈퀴 작업은 좋은 방법으로 보이며, 이것을 더 쉽게하기위한 플러그인이 있습니다. 다른 답변 중 일부를 살펴보면 세부 정보를 볼 수 있습니다. :)

4
Luke Halliwell

갈퀴 작업을 시도하십시오. 예를 들면 다음과 같습니다.

  1. / lib/tasks/bootstrap.rake 파일을 만듭니다.
  2. 파일에서 기본 사용자를 작성하는 태스크를 추가하십시오.

    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
  1. 그런 다음 앱을 처음 설정할 때 rake db : migrate OR rake db : schema : load) 및 rake bootstrap : all을 수행 할 수 있습니다.
46
Aaron Wheeler

모든 Rails 응용 프로그램에서 찾은 db/seed.rb 사용하십시오.

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에서 만들려는 객체로 데이터베이스를 채워야합니다.

34
Jason Kim

마이그레이션에 new 데이터를 삽입하지 않는 것이 좋습니다. 대신 마이그레이션에서 기존 데이터 만 수정하십시오.

초기 데이터를 삽입하려면 YML을 사용하는 것이 좋습니다. 모든 Rails 프로젝트 설정에서 DB 디렉토리 아래에 조명기 디렉토리를 생성 한 다음 테스트 데이터에 YML 파일이 사용되는 것처럼 초기 데이터에 대한 YML 파일을 생성합니다. YML 파일에서 데이터를로드하는 새 작업.

lib/tasks/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/fixtures/users.yml :

test:
  customer_id: 1
  name: "Test Guy"
  email: "[email protected]"
  hashed_password: "656fc0b1c1d1681840816c68e1640f640c6ded12"
  salt: "188227600.754087929365988"
32
Jay Stramel

이것은 populator와 faker gem을 사용하는 나의 가장 좋아하는 솔루션입니다.

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

9
Mark Richman

seed-f 플러그인을 사용해보십시오.이 플러그인은 데이터를 시드하고 나중에 시드 데이터를 변경할 수있는 매우 간단한 플러그인이며 모든 환경에 대한 환경 특정 데이터 및 데이터를 시드 할 수 있습니다 .

6
DEfusion

가장 좋은 옵션은 3 번이라고 생각합니다. 주로 그렇게하면 기본 사용자가 없기 때문에 좋은 보안을 쓸모 없게 만들 수 있습니다.

4
Vinko Vrsalovic

Rails 콘솔. 스크립트 또는 마이그레이션을 설정하려는 노력이 필요없는 일회성 관리 작업에 적합합니다.

생산 기계에서 :

script/console production

... 그러면 ...

User.create(:name => "Whoever", :password => "whichever")

이 초기 사용자를 두 번 이상 생성하는 경우 Rails_ROOT/script /에 스크립트를 추가하고 프로덕션 시스템의 명령 행에서 또는 capistrano 작업을 통해 실행할 수도 있습니다.

3
Trevor Stow

이것에 대한 훌륭한 블로그 게시물 : http://railspikes.com/2008/2/1/loading-seed-data

나는 특별한 조명기 세트에 대한 Jay의 제안을 사용하고 있었지만 모델을 직접 사용하여 불가능한 데이터를 만드는 것을 빨리 발견했습니다 (acts_as_versioned를 사용할 때 버전이없는 항목)

3
Kevin Davis

해당 Rake 작업은 db-populate 플러그인에서 제공 할 수 있습니다.

http://github.com/joshknowles/db-populate/tree/master

3
pantulis

사용자와 그룹의 경우 기존 사용자에 대한 문제는 프로그래밍의 우발성이 아니라 응용 프로그램의 요구와 관련하여 정의되어야합니다. 아마도 앱에는 관리자가 필요합니다. 그런 다음 미리 채 웁니다. 또는 응용 프로그램을 시작할 때 사용자 설정을 요청하는 코드를 추가하십시오.

보다 일반적인 질문에 따르면 많은 Rails 앱은 미리 채워진 날짜로부터 혜택을받을 수 있습니다. 예를 들어 미국 주소 보유 애플리케이션은 모든 주와 약어를 포함 할 수 있습니다. 이 경우 이주는 당신의 친구입니다.

2
NickR

마이그레이션에 보관하겠습니다. 초기 설정에는 스키마를 사용하는 것이 좋지만 그 이유는 더 빠르기 때문에 문제가 발생하지 않기 때문입니다. 데이터에 대한 단일 추가 마이그레이션이 좋습니다.

마이그레이션과 동일한 형식이므로 스키마 파일에 데이터를 추가 할 수도 있습니다. 자동 생성 기능이 손실됩니다.

2
MattW.

일부 답변이 구식입니다. Rails 2.3.4이므로, Seed에서 db/seed.rb에서 사용 가능)이라는 간단한 기능이 있습니다.

#db/seed.rb
User.create( :name => 'default', :password => 'password' )
Comment.create( :title => 'Title', :body => 'First post!' )

마이그레이션 후 데이터를로드하기 위해 사용할 수있는 새로운 레이크 작업을 제공합니다.

rake db:seed

Seed.rb는 클래식 Ruby 파일입니다. 데이터를 추가하기 위해 클래식 데이터 구조 (배열, 해시 등) 및 반복자를 자유롭게 사용하십시오.

["bryan", "bill", "tom"].each do |name|
  User.create(:name => name, :password => "password")
end

UTF-8 문자 (프랑스어, 스페인어, 독일어 등에서 매우 일반적)로 데이터를 추가하려는 경우 파일 시작 부분에 추가하는 것을 잊지 마십시오.

# Ruby encoding: utf-8

이 Railscast는 좋은 소개입니다 : http://railscasts.com/episodes/179-seed-data

1
frenci