首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:链接Ruby宝石依赖项?

Rails:链接Ruby宝石依赖项?
EN

Stack Overflow用户
提问于 2013-06-24 14:59:07
回答 2查看 994关注 0票数 1

我正在创建一个Rails web应用程序,它使用共享的模型库(作为Rails引擎),存储在子存储库(Git子树)中。这个共享库包含对其他Ruby的依赖关系(在我的例子中是HTTParty和Dalli),我希望包含这个共享库的父项目自动引用它们。

但是,我的gem的依赖项在父项目中似乎没有解析,而且当我启动我的web应用程序时,它缺少了对共享库中的创业板依赖项的引用。(即NameError: uninitialized constant ApiClient::HTTParty)如果我显式地将这些引用添加到我的web应用程序的Gemfile (如取消注释下面的Gemfile行),一切都会正常工作。

如何将这些依赖项转换为“chain”,并让父项目自动解析这些引用?

下面是我的项目的样子:

代码语言:javascript
复制
[MyRailsApp]
 -- ...
 -- [app]
 -- [config]
 -- [lib]
   -- [MyLib]
     -- ...
     -- [app]
     -- [config]
     -- [lib]
       -- [MyLib]
         -- version.rb
         -- engine.rb
     -- MyLib.gemspec
     -- Gemfile
 -- Gemfile

MyRailsApp/Gemfile

代码语言:javascript
复制
source 'https://rubygems.org'

gem 'activesupport', '3.2.13', :require => 'active_support'
gem 'actionpack',    '3.2.13', :require => 'action_pack'
gem 'actionmailer',  '3.2.13', :require => 'action_mailer'
gem 'railties',      '3.2.13', :require => 'rails'
...
# gem 'dalli'
# gem 'httparty'

gem 'MyLib', :path => 'lib/MyLib'

MyLib/MyLib.gemspec

代码语言:javascript
复制
$:.push File.expand_path("../lib", __FILE__)

# Maintain your gem's version:
require "mylib/version"

# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
  s.name        = "MyLib"
  s.version     = MyLib::VERSION
  s.authors     = ["David"]
  s.email       = ["ops@myemail.com"]
  s.homepage    = "http://www.mysite.com"
  s.summary     = "Shared Library"
  s.description = "Shared Library"

  s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"]

  s.add_dependency "rails", "~> 3.2.13"
  s.add_dependency "dalli", ">= 2.6.4"
  s.add_dependency "httparty", ">= 0.11.0"
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-24 17:54:08

弄明白了。我想错了.我认为Gemspecs用于安装gem依赖项(运行得很好),Rails也会使用Gemspecs来确定应用程序启动时需要将哪些依赖项加载到内存中。至少,在使用Rails引擎时,情况并非如此。

对于一般的gem,一个典型的Rails web应用程序似乎在boot.rb文件中有一行代码,用于加载应用程序Gemfile中的所有宝石和依赖项。但是,这种自动加载似乎并没有扩展到Gemfile中列出的Rails引擎。在这种情况下,必须手动将依赖项加载到应用程序内存中,方法是找到engine.rb文件(在Rails引擎中),并在文件开头添加require 'yourgem'。这将在引擎加载时加载依赖项。

一位朋友找到并联系了我这个相关的问题/答案,如果这个解释不够的话:https://stackoverflow.com/a/5850503

票数 3
EN

Stack Overflow用户

发布于 2013-06-24 15:19:17

如果您希望rubygems理解您的依赖项,请将每个依赖项打包为一个适当的.gemspec文件。您不必发布gem,它可以是私有的,并且可以通过git://类型的URL引用。

问题是,通常您的.gemspec需要在根级。你不能把它埋没在你的项目中,因为Rubygems不会不顾一切地寻找这些东西。

在您的用例中,MyLib应该是一个单独的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17278637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档