【问题标题】:'bundle install' for a local gem is not resolving dependencies, while 'gem install' does本地 gem 的 'bundle install' 不能解决依赖关系,而 'gem install' 可以
【发布时间】:2012-07-16 23:18:44
【问题描述】:

我在目录“/home/enterprise/pkg”中有一个本地 gem (enterprise-0.0.1.gem)。 它依赖于 active_directory gem (v 1.5.5),这是在它的 enterprise.gemspec 文件中指定的,如下所示:-

gem.add_dependency("active_directory")

在我的应用程序的 Gemfile 中,我添加了以下行:-

gem 'enterprise', '0.0.1', path => '/home/enterprise/pkg'

当我这样做时

捆绑安装

在我的应用程序的源目录中,只安装了企业 gem。因此,我在引用 active_directory gem 时遇到了运行时错误。

但是当我这样做时

gem install /home/enterprise/pkg/enterprise-0.0.1.gem

依赖关系已解决,我可以在 gem 列表中看到 active_directory gem。

为什么使用 bundler 的依赖解析存在差异,而不是使用 ruby​​gems。

如果我需要提供有关环境的更多信息,请告诉我。 红宝石:1.9.2, RubyGems:1.8.24, 捆绑器:1.1.5, 转速:1.9.2。

我的 enterprise.gemspec 文件供参考:-

 # -*- encoding: utf-8 -*-
   require File.expand_path('../lib/enterprise/version', __FILE__)

   Gem::Specification.new do |gem|
      gem.authors       = ["example"]
      gem.email         = ["example@example.com"]
      gem.description   = %q{Enterprise Gem: example}
      gem.summary       = %q{Services: Authentication, Access Control}
      gem.homepage      = "http://example.com"  
      gem.files         = %w[
                       README.md
                       Rakefile
                       Gemfile
                       Gemfile.lock
                       enterprise.gemspec
                       lib/enterprise.rb
                       lib/enterprise/auth_service.rb
                       lib/enterprise/version.rb
                       ]
     gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
     gem.test_files    = gem.files.grep(%r{^(test|spec|features)/})
     gem.name          = "enterprise"
     gem.require_paths = ["lib"]
     gem.version       = Enterprise::VERSION
     gem.add_dependency("active_directory")
   end

【问题讨论】:

    标签: ruby-on-rails ruby rubygems bundler


    【解决方案1】:

    您的 gem 是否有包含以下内容的 Gemfile?

    source 'https://rubygems.org'
    
    # Specify your gem's dependencies in enterprise.gemspec
    gemspec
    

    尝试在应用程序 gemspec 中添加要求

    gem 'enterprise', '0.0.1', path => '/home/enterprise/pkg', :require => "active_directory"
    

    【讨论】:

    • 是的,我的企业 gem 的 Gemfile 中确实有这些。你需要我的 gemspec 文件吗?
    • 不,它似乎没有安装带有 :require 选项的 active_directory gem。它的行为方式与以前相同。仅安装企业 gem。
    • 我只是好奇使用自定义本地 gem 的标准做法是什么。每次将应用程序移动到生产服务器时都执行 [gem install 'enterprise' & bundle install] 没有意义。
    • 好吧,我想我只是将 'active_directory' 添加到应用程序 Gemfile 中?
    • 并且您每次部署到生产环境时都需要执行 bundle install,它不会引入任何未更改的内容 - bundle install --deployment - 猜测您已经阅读过此文档: gembundler.com/rationale.html
    【解决方案2】:

    我遇到了同样的问题,最终删除了 Gemfile.lock 以解决问题。

    【讨论】:

    • 为我的本地 gem 删除 Gemfile.lock 条目确实也解决了我的依赖问题。
    【解决方案3】:

    在你的gemspec 中使用gem.add_runtime_dependency——而不是add_dependency,无论你是否将它添加到你的Gemfile 中都应该需要gem。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多