문제

사용자가 로그인해야 하는 레일스 애플리케이션이 있습니다.따라서 애플리케이션을 사용할 수 있으려면 첫 번째 사람이 로그인할 수 있도록 시스템에 한 명의 초기 사용자가 있어야 합니다(그런 다음 후속 사용자를 생성할 수 있음).지금까지 나는 데이터베이스에 특별한 사용자를 추가하기 위해 마이그레이션을 사용해왔습니다.

물어본 후 이 질문, 새로운 개발 시스템에 새로운 데이터베이스를 설정하려면 마이그레이션을 실행하는 대신 db:schema:load를 사용해야 할 것 같습니다.불행히도 여기에는 데이터를 삽입하는 마이그레이션이 포함되지 않고 테이블, 키 등을 설정하는 마이그레이션만 포함되는 것 같습니다.

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

  1. 데이터 삽입 마이그레이션을 포함하도록 d:s:l을 가져오는 방법이 있나요?
  2. 이런 방식으로 데이터를 삽입하기 위해 마이그레이션을 전혀 사용하면 안 되나요?
  3. 데이터베이스에 데이터를 미리 채워서는 안 되나요?사용자가 없는 경우를 적절하게 처리하고 초기 사용자 계정이 애플리케이션 내에서 실시간으로 생성될 수 있도록 애플리케이션 코드를 업데이트해야 합니까?
  4. 다른 옵션이 있나요?:)
도움이 되었습니까?

해결책 7

저는 이 질문에 대해 제가 가졌던 훌륭한 답변 중 일부를 요약하고 싶다고 생각했고, 이제 제 생각과 함께 모두 읽었습니다. :)

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

  1. 특별한 '관리자' 사용자로 데이터베이스를 미리 채워야 합니까?아니면 애플리케이션이 처음 사용될 때 설정하는 방법을 제공해야 합니까?
  2. 데이터베이스에 데이터를 미리 채우려면 어떻게 해야 합니까?이는 파트 1에 대한 답변에 관계없이 유효한 질문입니다.관리자 이외의 사전 채우기에 대한 다른 사용 시나리오가 있습니다.

(1)의 경우 애플리케이션 자체 내에서 첫 번째 사용자를 설정하는 것은 정의에 따라 거의 사용되지 않는 기능에 대한 상당한 추가 작업인 것 같습니다.그러나 사용자가 원하는 비밀번호를 설정하도록 강제하므로 약간 더 안전할 수 있습니다.가장 좋은 솔루션은 다음 두 가지 극단 사이에 있습니다.초기 사용자를 설정하기 위한 스크립트(또는 rake 작업 등)가 있어야 합니다.그런 다음 개발 중에 기본 비밀번호를 자동으로 입력하고 프로덕션 설치/배포 중에 비밀번호를 입력하도록 스크립트를 설정할 수 있습니다(관리자의 기본 비밀번호를 사용하지 않으려는 경우).

(2)의 경우에는 훌륭하고 유효한 솔루션이 많이 있는 것으로 보입니다.갈퀴 작업은 좋은 방법인 것 같고, 이를 더욱 쉽게 만들어주는 몇 가지 플러그인이 있습니다.자세한 내용을 보려면 다른 답변 중 일부를 살펴보세요. :)

다른 팁

갈퀴 작업을 시도해 보세요.예를 들어:

  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: migration 또는 rake db:schema:load를 수행한 다음 rake bootstrap:all을 수행할 수 있습니다.

사용 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에서 생성하고 싶은 객체로 채워져야 합니다.

아무 것도 삽입하지 않는 것이 좋습니다. 새로운 마이그레이션의 데이터.대신 마이그레이션 시 기존 데이터만 수정하세요.

초기 데이터 삽입에는 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/fixtures/users.yml:

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

이것은 Populator와 Faker gem을 사용하는 제가 가장 좋아하는 새로운 솔루션입니다.

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

시도해 보세요 시드푸 데이터를 시드하고 나중에 해당 시드 데이터를 변경할 수 있는 매우 간단한 플러그인인 플러그인을 사용하면 환경별 데이터와 모든 환경에 대한 데이터를 시드할 수도 있습니다.

가장 좋은 옵션은 3번이라고 생각합니다. 그렇게 하면 기본 사용자가 없기 때문에 좋은 보안을 쓸모없게 만드는 좋은 방법입니다.

레일 콘솔 사용을 고려해보세요.스크립트나 마이그레이션을 설정하는 데 노력할 가치가 없는 일회성 관리 작업에 적합합니다.

생산 기계에서:

script/console production

...그 다음에 ...

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

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

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

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

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

나는 특수한 고정 장치 세트에 대한 Jay의 제안을 사용하고 있었지만, 모델을 직접 사용하는 것은 불가능할 데이터를 생성하고 있다는 사실을 곧 알게 되었습니다(act_as_versioned를 사용할 때 버전이 지정되지 않은 항목).

나는 그것을 마이그레이션에 보관할 것입니다.초기 설정에 스키마를 사용하는 것이 권장되지만 그 이유는 더 빠르므로 문제를 피할 수 있기 때문입니다.데이터에 대한 단일 추가 마이그레이션이면 충분합니다.

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

사용자 및 그룹의 경우 기존 사용자에 대한 질문은 프로그래밍의 우연성보다는 응용 프로그램의 요구 사항을 고려하여 정의되어야 합니다.아마도 앱에 관리자가 필요할 수도 있습니다.그런 다음 미리 채웁니다.아니면 그렇지 않을 수도 있습니다. 그런 다음 애플리케이션 시작 시 사용자 설정을 정상적으로 요청하는 코드를 추가합니다.

보다 일반적인 질문에서, 많은 Rails 앱이 미리 채워진 날짜로부터 이점을 얻을 수 있다는 것이 분명합니다.예를 들어, 미국 주소 보유 신청서에는 모든 주와 해당 약어가 포함될 수도 있습니다.이런 경우에는 마이그레이션이 당신의 친구라고 생각합니다.

답변 중 일부는 오래되었습니다.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 작업을 제공합니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top