2010-09-11 2 views
10

J'utilise Sinatra, et je voulais mettre en place certaines des tâches de rake de commodité que Rails a, en particulier rake db:seed.Comment faire pour que les tâches Rake s'exécutent sous mon application/environnement Sinantra?

Ma première passe était le suivant:

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 est un joyau qui console Rails imite. Donc, je ne faisais que nourrir le code dans le fichier de départ directement dans le fichier. Cela fonctionne, mais ce n'est évidemment pas idéal. Ce que je voudrais faire est de créer une tâche de l'environnement qui permet aux commandes à exécuter dans l'application Sinanta/environnement, comme ceci:

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 

Mais ce que je ne peux pas comprendre comment mettre en place l'environnement donc les tâches de rake peuvent fonctionner en dessous. Toute aide serait très appréciée.

Répondre

10

Je l'ai mis en place un Rakefile pour Sinatra en utilisant une sorte d'environnement Rails comme:

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

Vous avez alors quelque chose dans config/environment.rb qui contient ce que vous devez démarrer votre application correctement. Il pourrait être quelque chose comme:

require "rubygems" 
require "bundler" 
Bundler.setup 

require 'sinatra' 

Mettre cette installation dans un fichier séparé évite d'encombrer votre Rakefile et peut être utilisé pour lancer votre application Sinatra par config.ru si vous utilisez que:

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

run Sinatra::Application 
Questions connexes