【问题标题】:How to include custom .rb script in Rails app如何在 Rails 应用程序中包含自定义 .rb 脚本
【发布时间】:2013-02-16 15:45:18
【问题描述】:

好的,我有这个应该包含在许多 Rails 应用程序中的 Ruby 脚本。所以我不想把它分解成碎片并塞进一个特定的应用程序中,而是宁愿把它保持在一个部分,让 Rails 应用程序加载它。 该脚本主要来自模型、邮件程序和很少的控制器。

如果我的脚本是tools.rb,我应该把它放在我的 Rails 文件树的什么位置,我应该如何/在我的 Rails 应用程序的什么位置包含它?该脚本还带有 YAML 文件。

这是我学习 Rails 的第二天,所以请多多包涵。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您可以将所有额外的内容保存在 /app/modules/lib 中。我更喜欢lib。 放入lib 文件夹后,在任何初始化程序中都需要它(或创建一个)

    require "./lib/tools" in /config/initializers/tools.rb

    还有 tadaa !!您可以在 rails 应用程序的任何地方使用相应的类/模块!

    所有的 YAML 文件都应该放在/config/

    *** 修复 '/lib/tools' 中的语法

    【讨论】:

      【解决方案2】:

      您可以在lib folder 中包含您自己的.rb 文件。您可以在自己的 rb 文件下包含、模块、类...等。

      如果您想要自动加载或自动要求您的自定义库代码,您必须打开您的 config/application.rb 并添加下一行,例如:

      config.autoload_paths += %W(#{config.root}/extras #{config.root}/lib)
      

      你可以看看:

      http://reefpoints.dockyard.com/ruby/2012/02/14/love-your-lib-directory.html

      您的yaml 文件应该在/config/ 文件夹中。

      问候!

      【讨论】:

        【解决方案3】:

        如果您在脚本中定义了任何 moduleclass 并在应用程序中使用该模块或类,您只需将其放入 lib 即可。它将在应用程序的任何地方访问。如果您需要初始化一些需要您的应用程序的东西,请加载该文件。除非需要,否则不要加载东西。如果您认为它必须在应用程序启动之前加载。然后你可以输入config/initializers

        yml 文件可以像下面一样在一些initializers 文件中加载(可能在您的tools.rb 中):

             MY_TOOLS = YAML.load_file("#{RAILS_ROOT}/config/tools.yml")
        

        然后你可以在应用中的任何地方使用MY_TOOLS

        【讨论】:

        • 好的,我已经把tools.rb放到/lib,Yaml文件放到/config,然后重启服务器。但是现在当我尝试从模型中创建 tools.rb 中的类实例时,它会出现:找不到 ModelName::ClassImTryingToCall。如何让它在 tools.rb 中进入我的班级?
        • 您将可以访问 lib 中应用的所有模型。这不是问题。
        • 好的,我知道出了什么问题。我想这是一个约定。它希望有一个与文件同名的类/模块。所以在 tools.rb 中必须制作类工具,现在它可以工作了。
        • 你应该有与类名相同的文件名。这就是rails如何找到类。如果你没有指定与类名相同的文件名,rails 就找不到类。
        猜你喜欢
        • 2019-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        相关资源
        最近更新 更多