Domanda

(Questa è davvero una domanda newbie su Rake & Rails e le dipendenze in generale. Cercando di avvolgere la mia testa intorno a come tutto questo si combina)

In sostanza, voglio un compito Rake che si comporta come seed.rb ma è chiamato a parte. Aggiunge dati di test per l'ambiente di sviluppo, mentre il mio seed.rb fornisce i dati di base per tutti gli ambienti.

Lo script, family_seed.rb, usa factorygirl per generare alcuni record. Ecco come si presenta:

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')

Funziona bene con bundle exec "ruby db/family_seeds.rb", ma la mia domanda è come configurarlo con il rastrello. Nel caso il tutto è inserito all'interno di un task Rake? Come potrei, invece, costituire un compito che avrebbe chiamato il copione, garantendo nel contempo che l'ambiente di sviluppo Rails è disponibile quando viene eseguito? Non sto cercando solo per ottenere il lavoro fatto, ma per farlo in un modo "giusto".

È stato utile?

Soluzione

Un modo per avvicinarsi a questo sarebbe quello di creare una classe o modulo in lib (questo rende più facile per i test di scrittura per, e rende il codice più riutilizzabile):

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

Come creare il task rake:

require 'family_seed'

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

Starei attento con permettendo cose come Family.delete_all e Member.delete_all da usare troppo liberamente. Si potrebbe facilmente spararsi in un piede in seguito chiamando qualcosa che non volevi in ??un db di produzione.

Come eseguire l'attività rake:

Esegui nel vostro comando come con il seguente:

bundle exec rake seed:families

Altri suggerimenti

Creare un compito rastrello e richiede: ambiente

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

Dopo è possibile eseguire questa operazione rake delete_all

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top