【问题标题】:How to make a Rails engine expose a file to the Rails App Root?如何让 Rails 引擎向 Rails App Root 公开文件?
【发布时间】:2015-10-28 21:31:24
【问题描述】:

我知道在我的 Rails 引擎中,我可以创建一个 app/controllers/blah_controller.rb 文件,并且可以从我的 Rails 应用程序访问该控制器,就像在 Rails 应用程序本身中定义它一样。

如果我希望引擎将文件公开到 Rails 应用程序的根目录中,我应该将它放在 Rails 引擎的什么位置?基本 gem 的结构如下:

my_engine
  |_bin
  |_lib
  .gitignore
  my_engine.gempspec
  Gemfile
  Rakefile
  README.md 

我只是将the_file.rb 添加到 gem 的根目录吗?如果是这样,Rails 怎么知道将它包含在 gem 根目录中而不包含其他文件?

my_engine
  |_bin
  |_lib
  .gitignore
  my_engine.gempspec
  Gemfile
  Rakefile
  README.md 
  the_file.rb    # I want this file to be present in the Rails app root.

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-4 rails-engines


【解决方案1】:

No Rails 不知道如何加载根路径文件。

您要查找的rails 部分是railtie 引擎:http://api.rubyonrails.org/classes/Rails/Engine.html

我希望您将引擎安装到应用程序中,以便进行调试。在具有引擎的应用中,您可以检查预先加载的路径:

MyEngine::Engine.config.eager_load_paths

返回所有加载路径的数组。

你需要做的就是:配置引擎加载根路径:

module MyEngine
  class Engine < ::Rails::Engine
    isolate_namespace MyEngine
    config.eager_load_paths << File.expand_path('../../..', __FILE__)
  end
end

然后在 Rails 应用程序中创建一个虚拟初始化程序,这需要您的引擎根文件:

# /config/initializers/my_engine_dummy.rb
require 'your_engine_root_file.rb'

your_engine_root_file.rb里面放一些方法

p 'Welcome to my engine`

从您的 rails 应用程序加载 rails 控制台并查看漂亮的消息

假设:

我假设您使用 MyEngine 作为引擎的命名空间。

建议:

不要那样做 :) 很多人都知道名称崩溃是软件开发中常见的事情。因此,您可能希望将引擎文件隔离在命名空间后面。

希望有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多