使用Sinatra时如何从gem导入rake任务?

时间:2011-03-28 11:10:58

标签: ruby rubygems rake sinatra task

我正在尝试向orientdb gem添加一些基本的rake任务,这将允许我创建数据库,创建数据库迁移和迁移数据库 - 类似于rails迁移。

当我在本地执行rake任务时,我得到了db:settings,db:create和db:create_migration工作,但是在我将它们放入gem之后我无法弄清楚如何从Sinatra访问它们使用“rake”时的应用。

我有一种感觉我要么a)没有正确组织gem中的文件和/或b)没有从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 patchlevel 136)(2011-03-24 5f5278c)(OpenJDK 64位服务器VM 1.6.0_20)[linux-amd64-java]

1 个答案:

答案 0 :(得分:12)

我想出了如何在经过10个多小时的努力解决这个问题后再去做,我不得不在这个过程中修补Rake。我提交了这个补丁: https://github.com/jimweirich/rake/pull/28

我还写了一篇包含修补代码的博客文章: http://www.justinidea.com/2011/03/proposed-modification-to-rakes-discovery-of-tasks.html

[UPDATE]

我还找到了另一种不需要rake补丁的方法,去看看...我所要做的就是创建一个tasks.rb并在rakefile中需要它,但为了完成这项工作我必须做到这一点看起来像这样:

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

我仍然认为rake补丁非常酷。 :)

[更新2]

在rake团队接受pull请求之前,我创建了一个名为alltasks的gem,它将加载Gemfile中Gem及其依赖项所包含的所有rake任务。

https://github.com/ricaurte/alltasks