2010-09-11 14 views
10

Sto usando Sinatra e volevo impostare alcune delle funzioni di rake di convenienza di Rails, in particolare rake db:seed.Come posso far funzionare le attività di Rake sotto la mia app/ambiente Sinantra?

mio primo passaggio è stato questo:

namespace :db do 
    desc 'Load the seed data from db/seeds.rb' 
    task :seed do 
    seed_file = File.join(File.dirname(__FILE__), 'db', 'seeds.rb') 
    system("racksh < #{seed_file}") 
    end 
end 

racksh è una gemma che imita console Rails. Quindi stavo semplicemente inserendo il codice nel file seme direttamente in esso. Funziona, ma ovviamente non è l'ideale. Quello che mi piacerebbe fare è creare un'attività di ambiente che permette i comandi da eseguire sotto la Sinanta app/ambiente, in questo modo:

task :environment do 
    # what goes here? 
end 

task :seed => :environment do 
    seed_file = File.join(File.dirname(__FILE__), 'db', 'seeds.rb') 
    load(seed_file) if File.exist?(seed_file) 
end 

Ma quello che non riesco a capire è come impostare l'ambiente quindi i compiti del rake possono essere eseguiti sotto di esso. Qualsiasi aiuto sarebbe molto apprezzato.

risposta

10

ho istituito un Rakefile per Sinatra utilizzando un tipo di ambiente Rails-like:

task :environment do 
    require File.expand_path(File.join(*%w[ config environment ]), File.dirname(__FILE__)) 
end 

È quindi hanno qualcosa in config/environment.rb che contiene ciò che è necessario per avviare la vostra applicazione in modo corretto. Potrebbe essere qualcosa di simile:

require "rubygems" 
require "bundler" 
Bundler.setup 

require 'sinatra' 

Mettendo questo set-up in un file separato evita ingombrare lo Rakefile e può essere utilizzato per lanciare la vostra applicazione Sinatra attraverso config.ru se si utilizza che:

require File.expand_path(File.join(*%w[ config environment ]), File.dirname(__FILE__)) 

run Sinatra::Application 
Problemi correlati