【问题标题】:Can tasks.rake within lib/tasks see other ruby files within lib? [Rails]lib/tasks 中的 tasks.rake 可以查看 lib 中的其他 ruby​​ 文件吗? [导轨]
【发布时间】:2015-04-22 01:59:17
【问题描述】:

我不断收到一个错误,它无法从 rake 任务中“看到”位于我的库中的类。

即我有我的 rake 任务:

task task_name: :environment do

    object=ClassA.new
    ModuleA.read(object)
end

并且moduleA.rbclassA.rb都在lib,rake任务在lib/tasks.rake

我尝试运行rake task_name 时遇到的错误是:

rake aborted!
NameError: uninitialized constant ClassA

我试图要求模块/类,但我最终得到:

rake aborted!
LoadError: cannot load such file -- lib/classA

【问题讨论】:

    标签: ruby-on-rails ruby rake


    【解决方案1】:

    您需要提取文件。请记住,您的路径需要相对于 rakefile 所在的目录。

    load './ClassA.rb' 
    load './moduleA.rb'
    require 'ClassA'
    

    require 是多余的,但如果您的classA.rb 文件非常复杂,则可能需要它。另请注意,您的命名风格与 Rails 中默认的 Inflector 不匹配,但如果您只使用纯 ruby​​,这应该无关紧要,尽管您应该遵循约定。

    【讨论】:

      【解决方案2】:

      如果您的 lib/ 文件夹由 Rails 加载,您不需要任何东西来调用其他库,因为 Rails 自动加载器会为您完成这项工作。

      默认情况下,Rails 不包含 lib/ 文件夹,因此您必须将此行添加到您的 config/application.rb 文件中:

      config.autoload_paths << File.join(config.root, 'lib')
      

      那么它应该可以工作了。

      【讨论】:

        猜你喜欢
        • 2012-12-24
        • 1970-01-01
        • 2014-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-05
        • 1970-01-01
        相关资源
        最近更新 更多