【问题标题】:What is the path to load a rake task for a new gem为新 gem 加载 rake 任务的路径是什么
【发布时间】:2012-07-13 13:12:44
【问题描述】:

我尝试使用捆绑程序创建一个新的 ruby​​gem,并打算从 ruby​​gem 文件夹 ~/work/bezier/lib/task/ 加载 rake 任务。但是 pwd 似乎在 /Users/wizztjh/work/bezier_server 中,为新 gem 加载 rake 任务的路径是什么?

我的 ruby​​gem 文件夹

bezier/lib
  /railtie.rb
  /task/get_transitions.rake

From: /Users/wizztjh/work/bezier/lib/bezier/railtie.rb @ line 4 :

    1: module Bezier
    2:   class Railtie < Rails::Railtie
    3:     rake_tasks do
 => 4:       binding.pry
    5:       load "lib/task/get_transitions.rake"
    6:     end
    7:   end
    8: end

[1] pry(#<Bezier::Railtie>)> Dir.pwd
=> "/Users/wizztjh/work/bezier_server"
[2] pry(#<Bezier::Railtie>)> 

因为根据 ruby​​gem 文档

rake_tasks do
    load "path/to/my_railtie.tasks"
end

但是什么是路径/到?

【问题讨论】:

    标签: ruby rubygems rake bundler


    【解决方案1】:

    gem 的 lib 目录是 Railtie rake_tasks 加载路径的根目录。因此,如果您的任务在 lib/tasks/stuff.rake 中,请使用 load 'tasks/stuff.rake'

    sitemap_generator gem 就是一个这样的例子。

    【讨论】:

      【解决方案2】:

      我尝试使用github的高级代码搜索来搜索Rails::Railtie rake_tasks do loadbroadcast并找到了解决方案。

      bezier/tasks/get_transitions.rake

      #bezier/lib/railtie.rb
      module Bezier
        class Railtie < Rails::Railtie
          railtie_name :bezier
          rake_tasks do 
             load "bezier/tasks/get_transitions.rake"
          end
        end
      end
      

      所以,ruby gem railtie load pwd 是 Gem.path 的根

      【讨论】:

        猜你喜欢
        • 2012-04-21
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 2011-10-26
        相关资源
        最近更新 更多