Как заставить задачи Rake запускаться под моим приложением/средой Sinantra?
Я использую 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
Я установил 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