Как импортировать грабли из гемма при использовании Sinatra? - PullRequest
6 голосов
/ 28 марта 2011

Я пытаюсь добавить некоторые базовые задачи rake в гем orientdb, которые позволят мне создать базу данных, создать миграции базы данных и перенести базу данных - подобно миграции rails.

Когда у меня были грабли локально, я получил db: settings, db: create и db: create_migration, но после того, как я поместил их в гем, я не могу понять, как получить к ним доступ из Синатры. приложение при использовании «граблей».

У меня такое ощущение, что я либо: а) неправильно организовываю файлы в геме и / или б) неправильно вызываю вещи из приложения Sinatra.

Текущее состояние моего разветвленного хранилища: https://github.com/ricaurte/orientdb-jruby

Я помещаю файл для задач в lib / orientdb / tasks / database.rake => https://github.com/ricaurte/orientdb-jruby/blob/master/lib/orientdb/tasks/database.rake

Sinatra App Rakefile

APPLICATION_ROOT = File.expand_path('..', __FILE__)

require 'rake'
require 'orientdb'
#import "orientdb/tasks/database.rake"

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

конфиг / окружающая среда

require "rubygems"
require "bundler"
Bundler.setup

require 'sinatra'
require "orientdb"

ruby: jruby 1.6.0 (уровень исправления ruby ​​1.9.2 136) (2011-03-24 5f5278c) (64-битный сервер OpenJDK VM 1.6.0_20) [linux-amd64-java]

1 Ответ

12 голосов
/ 29 марта 2011

Я разобрался, как это сделать после 10 с лишним часов попыток разобраться, и мне пришлось в процессе исправлять Rake. Я представил этот патч: https://github.com/jimweirich/rake/pull/28

Я также написал запись в блоге, которая содержит исправленный код: http://www.justinidea.com/2011/03/proposed-modification-to-rakes-discovery-of-tasks.html

[UPDATE]

Я также нашел другой способ, который не требует патча рейка, пойди разберись ... все, что мне нужно было сделать, это создать файл tasks.rb и требовать его внутри файла rakefile, но чтобы сделать это, мне пришлось сделать выглядеть так:

require 'rake'
require 'bundler'
Bundler.setup
require 'orientdb'
require 'orientdb/tasks'

Я все еще думаю, что патч рейка довольно крутой. :)

[ОБНОВЛЕНИЕ 2]

В то же время, пока команда получения рейка не приняла запрос на извлечение, я создал гем под названием alltasks, который будет загружать все грабли, которые содержат гемы в вашем Gemfile и их зависимости.

https://github.com/ricaurte/alltasks

...