如何让 Rails 引擎将文件公开给 Rails App Root?
How to make a Rails engine expose a file to the Rails App Root?
我知道在我的 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.
No
Rails 不知道如何加载根路径文件。
您正在寻找的 rails 部分是 railtie 引擎:http://api.rubyonrails.org/classes/Rails/Engine.html
我希望您将引擎安装到应用程序以便进行调试。在具有引擎的应用程序中,您可以检查预先加载的路径:
MyEngine::Engine.config.eager_load_paths
其中 returns 所有加载路径的数组。
您需要做的就是:配置Engine加载根路径:
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 作为引擎的命名空间。
建议:
不要那样做 :) 正如许多人所知,名称崩溃在软件开发中很常见。因此,您可能希望将引擎文件隔离在命名空间之后。
希望对您有所帮助
我知道在我的 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.
No
Rails 不知道如何加载根路径文件。
您正在寻找的 rails 部分是 railtie 引擎:http://api.rubyonrails.org/classes/Rails/Engine.html
我希望您将引擎安装到应用程序以便进行调试。在具有引擎的应用程序中,您可以检查预先加载的路径:
MyEngine::Engine.config.eager_load_paths
其中 returns 所有加载路径的数组。
您需要做的就是:配置Engine加载根路径:
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 作为引擎的命名空间。
建议:
不要那样做 :) 正如许多人所知,名称崩溃在软件开发中很常见。因此,您可能希望将引擎文件隔离在命名空间之后。
希望对您有所帮助