创建仅包含 Rails 模板部分的 Ruby gem 是否有意义?
-
06-07-2019 - |
题
我试图了解 Ruby gems 中的哪些功能有效,哪些无效(主要是从为自己创建一个宝石以便在下一个项目中重用功能的角度)。
当您创建 Ruby gem 时,是否仅限于包含 Ruby 功能,还是可以创建由 Rails 模板、CSS 文件和 JavaScript 组成的 gem?
如果是这样,gem 的用户将如何访问 Rails 项目中的这些资源(除了向environment.rb 文件添加“config gem”语句之外)?
解决方案
不,没有。Gems 是代码库,而不是静态文件。
当您加载 gem 时,您不会将文件移动到公共目录中。您加载 ruby 文件并访问模块。因此,您只能在其中执行 ruby 代码。
但是,您的 ruby 代码可以为您提供一些帮助,例如让您轻松构建设计。
如果您想在每个 ruby 项目中包含一些静态文件资源,我会看到两种解决方案:
创建一个模板项目,包括所有的css、javascript等。你每次都使用的。你可以采取 吊带 作为一个例子。
第一个解决方案是我最喜欢的,但您可能想采用另一个。
其他提示
正如dmathieu所说,gems适用于安装在系统加载路径中的ruby库,而不适用于进入项目目录的内容。但是,如果您确实希望将rails项目框架打包为gem,那么使用一个小的ruby可执行文件作为生成器将框架项目树复制到目标目录中就足够简单了。然后你可以将整个东西打包成一个gem,你的骨架文件可以放在gem目录中,你可以说 generate_new_project someproject
将它们复制到你的新项目目录中。
您可以轻松添加部分内容和其他HAML,Builder或ERB视图。以下结构应该有效:
# in my_gem/rails/init.rb
ActionController::Base.append_view_path(File.expand_path(File.join(File.dirname(__FILE__), '..', 'views')))
# in my_gem/views/my_gem/_some_partial.html.erb
This is a partial from MyGem!
# in your_rails_app/views/some_controller/some_view.html.erb:
<%= render :partial => '/my_gem/some_partial' -%>
但这并没有直接回答你关于静态文件的问题。通常最好的选择是将CSS,JS和其他文件复制到公共目录的生成器。或者,您可以使用 StaticFilesController
并将静态文件放在该视图目录中。