【问题标题】:How do I import rake tasks from a gem when using Sinatra?使用 Sinatra 时如何从 gem 中导入 rake 任务?
【发布时间】:2011-07-24 09:48:11
【问题描述】:

我正在尝试向 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-Bit Server VM 1.6.0_20) [linux-amd64-java]

【问题讨论】:

    标签: ruby rubygems rake sinatra task


    【解决方案1】:

    经过 10 多个小时的尝试,我想出了如何做到这一点,并且在此过程中我不得不修补 Rake。我提交了这个补丁: https://github.com/jimweirich/rake/pull/28

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

    [更新]

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

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

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

    [更新 2]

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

    https://github.com/ricaurte/alltasks

    【讨论】:

    • 很好,我认为您应该为此获得自学者徽章。希望另外两个人会同意我的观点。顺便说一句,您可以接受自己的答案,我认为在这种情况下它也是社会可以接受的。
    • 谢谢穆!我必须等到明天才能接受我自己的答案,然后才会这样做。
    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2012-07-15
    相关资源
    最近更新 更多