Jos*_*eim 17 gem ruby-on-rails rails-engines gemfile
出于好奇......在我以前的帖子Rails3.1引擎中:无法让SLIM或HAML在测试/虚拟应用程序中工作我问在哪里告诉Ruby在我的test/dummy应用程序中使用一些gem .
(显而易见的?)答案就是将它放入我的引擎的Gemfile中.这有效,但它让我有点不舒服,因为在耶胡达卡茨 '后澄清.gemspec和Gemfile的角色他提到......
...在开发gem时,Gemfile"gem的Gemfile应包含Rubygems源和单个gemspec行".
另一方面,在我的Engine的Gemfile(使用Rails生成rails plugin new my_engine)中,有:
# jquery-rails is used by the dummy application
gem "jquery-rails"
Run Code Online (Sandbox Code Playgroud)
所以这似乎是正确的.更新:不,它没有!看下面的答案......
仍然,在StackOverflow上的其他地方我看到解决方案据说只需要所需的宝石config/application.rb,而/sf/ask/361172521/ -into-the-it它被告知要充分利用lib/<your_engine>/engine.rb file.
这是我的想法:为什么test/dummy应用程序不会自动要求.gemspec文件中指定的所有Gems ?我们甚至告诉宝石,哪些宝石用于生产,哪些用于开发模式,明确使用add_dependency和add_development_dependency,所以我没有看到任何理由test/dummy不这样做.
所以这是最后一个问题:我究竟要在哪里告诉Ruby在我的test/dummy应用程序中使用gem ?我不想强迫RUBY在主机APP中使用GEM.
我认为正确的方法是:
引擎是一个普通的宝石.开发gem时,将其依赖项放在gemspec文件中.如果您使用bundle,那么作为开发人员,您可以创建一个.lock具有您没有问题的特定版本的文件.但是,如果在其中声明了依赖关系gemspec并不足以使用它们,则必须require在gem代码中使用它们.当需要它们时,如果gem与bundle .lock一起使用,则使用版本.
在引擎中,与任何其他宝石一样,它也是一样的.您可以在gemspec文件中定义依赖项并运行,bundle install但仅使用它们是不够的.例如,您必须要求它们lib/my_engine.rb.
例如:
# File: my_engine.rspec
# ...
s.add_dependency `slim_rails`, ' ~>1.0'
Run Code Online (Sandbox Code Playgroud)
# File: lib/my_engine.rb
require "my_engine/engine"
require "slim-rails"
module MyEngine
end
Run Code Online (Sandbox Code Playgroud)
我不确定为什么它们会被使用而没有更多的麻烦如果设置在Gemfile,但正如rails文档所说:
应该在引擎根目录下的.gemspec文件中指定引擎内的Gem依赖项.原因是发动机可以作为宝石安装.如果要在Gemfile中指定依赖项,那么传统的gem安装将无法识别这些依赖项,因此不会安装它们,从而导致引擎出现故障.
这是我到目前为止发现的情况。
在引擎(使用 创建rails plugin new my_engine)中,您必须仅在 my_engine.gemspec 文件中指定所需的 gem,因为然后使用 来从 test/dummy/Gemfile 引用它们gemspec。
这是生成的 test/dummy/Gemfile 内容:
source "http://rubygems.org"
# Declare your gem's dependencies in simple_view_helpers.gemspec.
# Bundler will treat runtime dependencies like base dependencies, and
# development dependencies will be added by default to the :development group.
gemspec
# jquery-rails is used by the dummy application
gem "jquery-rails"
# Declare any dependencies that are still in development here instead of in
# your gemspec. These might include edge Rails or gems from your path or
# Git. Remember to move these dependencies to your gemspec before releasing
# your gem to rubygems.org.
# To use debugger
# gem 'debugger'
Run Code Online (Sandbox Code Playgroud)
我真的不知道该行在这里做什么gem "jquery-rails",似乎与评论中提出的内容完全矛盾。另一方面,当我尝试在我的测试/虚拟应用程序中使用SLIM gem(而不是 ERB)时,似乎我必须在 Gemfile 中指定它,否则它将无法工作。还是有点混乱,这个东西...
| 归档时间: |
|
| 查看次数: |
3249 次 |
| 最近记录: |