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

ric*_*rte 6 ruby rake rubygems task sinatra

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

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

我有一种感觉,我要么a)没有正确组织宝石中的文件和/或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
Run Code Online (Sandbox Code Playgroud)

配置/环境

require "rubygems"
require "bundler"
Bundler.setup

require 'sinatra'
require "orientdb"
Run Code Online (Sandbox Code Playgroud)

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]

ric*_*rte 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'
Run Code Online (Sandbox Code Playgroud)

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

[更新2]

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

https://github.com/ricaurte/alltasks

  • 很好,我认为你应该得到一个自学者徽章.希望另外两个人会同意我的看法.顺便说一句,你被允许接受你自己的答案,我认为在这种情况下它也是社会可接受的. (5认同)