Вопрос

(Это действительно вопрос новичка о Rable & Rails & Deperiancess в целом. Попытка обернуть мою голову вокруг того, как все это соединяется вместе)

По сути, я хочу задачу граблей, которая действует как Seed.RB, но называется отдельно. Он добавляет тестовые данные для среды разработки, в то время как My Seed.RB предоставляет основные данные для всех сред.

Сценарий, family_seed.rb, использует FactoryGirl для создания некоторых записей. Похоже:

require File.expand_path('../../config/environment', __FILE__)
require './spec/factories'

Family.delete_all
Member.delete_all
zinsser = Factory.create(:family, :last_name=>'Zinsser', :first_name=>'Carl', :sim_id => '500')
blackburn = Factory.create(:family, :last_name=>'Blackburn', :first_name=>'Greg', :sim_id => '501')

Он работает нормально с bundle exec "ruby db/family_seeds.rb", но мой вопрос в том, как установить его с помощью граблей. Следует ли все это быть помещено в задачу грабли? Как вместо этого я мог создать задачу, которая бы вызвала сценарий, обеспечивая при этом среду разработки Rails, когда она работает? Я стараюсь не просто выполнить работу, но и сделать это «правильным».

Это было полезно?

Решение

Одним из способов приблизиться к этому будет создание класса или модуля в LIB (это облегчает написание тестов и делает код более повторным использованием):

require '../spec/factories'

class FamilySeed

  def self.seed
    raise "Don't run this in production!" if Rails.env.production?

    Family.delete_all
    Member.delete_all
    zinsser = Factory.create(:family, :last_name=>'Zinsser', :first_name=>'Carl', :sim_id => '500')
    blackburn = Factory.create(:family, :last_name=>'Blackburn', :first_name=>'Greg', :sim_id => '501')
  end

end

Как создать задачу грабли:

require 'family_seed'

namespace :seed do
  task :families => :environment do
    FamilySeed.seed
  end
end

Я был бы осторожен с тем, чтобы позволить таким вещам, как Family.delete_all и member.delete_all, чтобы быть слишком свободно использованными. Вы можете легко выстрелить себя в ногу позже, позвонив на то, что вы не хотели на производственном DB.

Как запустить задачу грабли:

Запустите его в своей команде, как со следующим:

bundle exec rake seed:families

Другие советы

Создайте задачу грабли и требуется: среда

task :delete_all => :environement do
  require Rails.root.join('spec/factories')
  Family.delete_all
  Member.delete_all
  zinsser = Factory.create(:family, :last_name=>'Zinsser', :first_name=>'Carl', :sim_id => '500')
  blackburn = Factory.create(:family, :last_name=>'Blackburn', :first_name=>'Greg', :sim_id => '501')
end

После того, как вы сможете выполнить эту задачу rake delete_all

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top