为新gem加载rake任务的路径是什么

问题描述 投票:3回答:2

我尝试用bundler创建一个新的rubygem,并且意图从rubygem文件夹〜/ work / bezier / lib / task /加载rake任务。但是pwd似乎在/ Users / wizztjh / work / bezier_server中,为新gem加载rake任务的路径是什么?

我的rubygem文件夹

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>)> 

因为根据rubygem文档

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

但路径是什么?

ruby rubygems rake bundler
2个回答
2
投票

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

贝塞尔/任务/ 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的根


1
投票

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

一个这样的例子是sitemap_generator gem

© www.soinside.com 2019 - 2024. All rights reserved.