4

我尝试使用捆绑程序创建一个新的 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

但是什么是路径/到?

4

2 回答 2

3

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

贝塞尔/任务/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 loadpwd 是 Gem.path 的根

于 2012-07-14T06:35:52.653 回答
2

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

一个这样的例子是sitemap_generator gem

于 2017-10-23T01:00:59.630 回答