Подтвердить что ты не робот

Как заставить задачи 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 могли работать под ней. Любая помощь будет высоко оценена.

4b9b3361

Ответ 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