2010-09-11 7 views
10

Estoy usando Sinatra, y quería configurar algunas de las tareas de rake convenientes que tiene Rails, específicamente rake db:seed.¿Cómo hago que las tareas de Rake se ejecuten en mi aplicación/entorno Sinantra?

Mi primer paso fue la siguiente:

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 es una joya que imita la consola de Rails. Así que solo estaba alimentando el código en el archivo semilla directamente en él. Funciona, pero obviamente no es ideal. Lo que me gustaría hacer es crear una tarea de entorno que permite a los comandos que se ejecutan bajo el Sinanta aplicación/medio ambiente, así:

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 

Pero lo que no puedo entender es cómo configurar el entorno para que las tareas de rake puedan ejecutarse debajo de él. Cualquier ayuda sería muy apreciada.

Respuesta

10

He establecido un Rakefile de Sinatra utilizando un tipo de entorno de Rails-como:

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

A continuación, tienen algo en config/environment.rb que contiene lo que necesita para poner en marcha su aplicación correctamente. Podría ser algo como:

require "rubygems" 
require "bundler" 
Bundler.setup 

require 'sinatra' 

Poner esta configuración en un archivo separado evita que saturan su Rakefile y se puede utilizar para poner en marcha su aplicación Sinatra a través config.ru si utiliza esa:

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

run Sinatra::Application 
Cuestiones relacionadas