Isa*_*esh 20 rubygems ruby-on-rails-plugins ruby-on-rails-3.1 asset-pipeline
我正在编写一个具有一些依赖关系的rails引擎.我已经在gemspec中指定了依赖项,并且引擎在运行时找到它们bundle install(即Gemfile.lock看起来正确).当我想在Ruby文件中使用插件时,我可以这样做,但需要显式require dependency-name位于文件的顶部.
但是,当我想使用依赖项的资产管道时,sprockets无法找到它.
我正在使用的应用程序(现在)是一个虚拟应用程序,它位于rails插件的测试文件夹中.如果我在引擎的Gemfile(实际上是虚拟应用程序的Gemfile)中指定它们,Sprockets可以找到资产,但如果我在gemspec中指定它们则不会.我不想依赖Gemfile,因为这意味着任何使用我的插件的应用都需要手动将我的所有依赖项添加到他们的Gemfile中.出于同样的原因,我不想要一个涉及更新应用程序配置文件的解决方案.
当从gemspec中包含依赖项时,这适用于(在ruby文件中):
require 'dependency-name'
Run Code Online (Sandbox Code Playgroud)
但是当从gemspec中包含依赖项时,这(在JS文件中)不起作用:
//= require 'dependency-name'
Run Code Online (Sandbox Code Playgroud)
require从Gemfile中包含依赖项时,都不需要.我认为这很清楚,但如果您需要更多细节,请告诉我.
Isa*_*esh 27
我需要在我的engine.rb中明确包含依赖项,以使其资产最终出现在我的资产管道中.不知道为什么这是必要的,因为Alastor的答案听起来对我来说是正确的.值得注意的是,依赖关系是我使用bundler创建的宝石,但我不明白为什么这应该有所作为.
module MyRailsPluginFull
class Engine < ::Rails::Engine
require 'dependency1'
require 'dependency2'
end
end
Run Code Online (Sandbox Code Playgroud)
添加11/23/12
花了一些时间与Engines合作,我想我现在更全面地理解了这一点.Gemspec只是所需的依赖项列表,但gemspec并不指示应用程序在启动时从这些依赖项加载文件.另一方面,Gemfiles会在启动期间加载所有文件.
新增2015年3月20日
我在2年多前发表的声明"另一方面,Gemfiles在启动时加载了所有文件"并不完全正确.这主要是真实的Rails中,默认情况下运行Bundler.require,要求在上市的Gemfile所有依赖,如图发电机文件在这里 -注意,虽然Rails的默认行为从Rails3中改变轨道4所讨论这里,都使用Bundler.require.但是,有一个强有力的案例可以使用Bundler.setup,然后require "dependency1"在实际依赖的任何文件中显式depedency1.见本次讨论的Bundler.require对比Bundler.setup.
另外,正如@nruth在评论中指出的那样,这可能导致加载不必要的类.但是,如果依赖项设计得很好,那么它的类将主要被自动加载,从而为需要整个依赖项创建最小的开销.或者,如果它在一个可以单独使用的文件中定义其引擎,您可以只包含引擎文件,该文件应该将必要的文件添加到资产路径中,从而允许您在CSS和JS清单中要求其资产.请参阅此bootstrap-sass示例,其中gem将其所有资产config.assets.paths添加到其中并添加其中的一些config.assets.precompile.
虽然这个问题已经存在了几年,我甚至不记得当时正在编写的Rails引擎,但我怀疑正确的方法可能更接近于此:
module MyRailsPluginFull
class Engine < ::Rails::Engine
initializer 'bootstrap-sass.assets.precompile' do |app|
require 'dependency1'
# add dependency1's assets to the list of paths
app.config.assets.paths << ...
end
end
end
Run Code Online (Sandbox Code Playgroud)
但请注意,这不应该是必要的 - 依赖本身应该已经定义了这个初始化程序,因此只需要它就足够了,就像上面的bootstrap示例那样.
| 归档时间: |
|
| 查看次数: |
2962 次 |
| 最近记录: |