【问题标题】:Could not find a custom installed gem during runtime在运行时找不到自定义安装的 gem
【发布时间】:2021-09-20 05:37:37
【问题描述】:

在 rhel8 上,我构建并安装了一个自定义 gem test1

$ gem build test1.gemspec
  Successfully built RubyGem
  Name: test1
  Version: 0.0.1
  File: test1-0.0.1.gem
$ gem install test1-0.0.1.gem
Successfully installed test1-0.0.1
1 gem installed
# check if gem is installed. All gems are installed in this path
$ gem which test1
/usr/local/share/gems/gems/test1-0.0.1/lib/test1.rb

现在在我构建的另一个自定义 gem 中,gemspec 文件如下所示:

# in test2.gemspec file
Gem::Specification.new do |spec|
  spec.name          = "test2"
  ...

  spec.add_runtime_dependency "test1", "0.0.1"
  ...
end

当我尝试安装 test2 gem 时,它失败并说找不到已安装的 test1 gem。这个问题开始发生在 rhel8 上。我在 debian 和 alpine 上进行了测试,发现和安装 gem 没有问题。

$ gem build test2.gemspec
  Successfully built RubyGem
  Name: test2
  Version: 0.0.1
  File: test2-0.0.1.gem
$ gem install test2-0.0.1.gem
ERROR:  Could not find a valid gem 'test1' (= 0.0.1) in any repository

如果我更改为 add_development_dependency,它会构建并安装 gem。图像按预期工作,没有问题。有谁知道为什么我添加add_runtime_dependency 时找不到宝石?

【问题讨论】:

    标签: ruby rubygems rhel8


    【解决方案1】:

    如果您正在构建需要另一个私有 gem 的私有 gem,则需要在 gemspecGemfile 中定义依赖 gem,同时在 Gemfile 中提供实际源代码。

    例如,我们使用GemFury 来托管私有 gem,然后在需要此私有 gem 的任何其他 gem 中,我们这样做:

    # Gemfile
    source 'https://gem.fury.io/your-user/' do
      gem 'your-gem'
    end
    
    gemspec
    
    
    # your-gem.gemspec
    s.add_runtime_dependency 'your-gem', '0.0.1'
    

    【讨论】:

    • 我仍然遇到同样的问题。似乎 gem 只检查本地 gem 的当前目录,它应该检查 gem 路径 /usr/local/share/gems(在 gem envir 中定义)。如果我从根目录构建两个 gem(例如gem build path/to/dir/test1.gemspec),它可以工作。
    猜你喜欢
    • 2018-12-10
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多