Как сделать так, чтобы задачи Rake запускались под моим приложением / средой Sinantra? - PullRequest
10 голосов
/ 11 сентября 2010

Я использую Sinatra, и я хотел настроить некоторые из задач rake для удобства, которые есть у Rails, в частности rake db:seed.

Мой первый проход был таким:

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 - это камень, имитирующий консоль Rails. Так что я просто вводил код из начального файла прямо в него. Это работает, но, очевидно, не идеально. Я хотел бы создать задачу среды, которая позволяет запускать команды в приложении / среде Sinanta, например:

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

Но что я не могу понять, так это как настроить среду, чтобы задачи rake могли выполняться под ней. Любая помощь будет высоко ценится.

1 Ответ

10 голосов
/ 12 сентября 2010

Я установил Rakefile для Sinatra с использованием среды, подобной Rails:

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

Затем у вас есть что-то в config/environment.rb, содержащее то, что вам нужно для правильного запуска приложения. Это может быть что-то вроде:

require "rubygems"
require "bundler"
Bundler.setup

require 'sinatra'

Размещение этой настройки в отдельном файле позволяет избежать загромождения вашего Rakefile и может использоваться для запуска приложения Sinatra через config.ru, если вы используете это:

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

run Sinatra::Application
...