2010-09-11 31 views
10

Tôi đang sử dụng Sinatra và tôi muốn thiết lập một số nhiệm vụ cào tiện lợi mà Rails có, cụ thể là rake db:seed.Làm cách nào để tạo các tác vụ Rake chạy dưới ứng dụng/môi trường Sinantra của tôi?

vượt qua đầu tiên của tôi là thế này:

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 là một viên ngọc bắt chước Rails' console. Vì vậy, tôi đã cho ăn mã trong tệp hạt giống trực tiếp vào nó. Nó hoạt động, nhưng rõ ràng là không lý tưởng. Điều tôi muốn làm là tạo một tác vụ môi trường cho phép các lệnh chạy dưới ứng dụng/môi trường Sinanta, như vậy:

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 

Nhưng điều tôi không thể hiểu là cách thiết lập môi trường do đó, các công việc cào có thể chạy dưới nó. Bất kì sự trợ giúp nào đều được đánh giá cao.

Trả lời

10

tôi đã thiết lập một Rakefile cho Sinatra sử dụng một loại môi trường Rails như:

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

Sau đó bạn có một cái gì đó trong config/environment.rb có chứa những gì bạn cần phải khởi động ứng dụng của bạn đúng cách. Nó có thể là một cái gì đó như:

require "rubygems" 
require "bundler" 
Bundler.setup 

require 'sinatra' 

Đưa này thiết lập trong một file riêng biệt tránh làm lộn xộn của bạn Rakefile và có thể được sử dụng để khởi động ứng dụng Sinatra của bạn thông qua config.ru nếu bạn sử dụng:

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

run Sinatra::Application 
Các vấn đề liên quan