【问题标题】:Bundler can't find a gem even though gem install works即使 gem install 工作,Bundler 也找不到 gem
【发布时间】:2018-04-02 04:37:24
【问题描述】:

对于这个 Gemfile:

source 'https://rubygems.org'

ruby '2.3.1' # equivalent version to what jruby supports

gem 'jrubyfx'

Bundler 找不到 gem,即使 it is clearly available:

$ bundle install
Fetching gem metadata from https://api.rubygems.org/..........
Could not find gem 'jrubyfx' in any of the gem sources listed in your Gemfile.

如果我让 gem 自己完成工作, 可以很好地找到它:

$ gem install jrubyfx
Successfully installed jrubyfx-1.2.0-java
1 gem installed

所以现在我什至在我的系统上都有它,但尽管它甚至存在于本地,但 Bundler 仍然找不到它。

环境:

$ bundle --version
Bundler version 1.16.0.pre.3
$ gem --version
2.6.8
$ rbenv version
jruby-9.1.8.0 (set by /Users/trejkaz/Documents/prototype/.ruby-version)
$ ruby --version
jruby 9.1.8.0 (2.3.1) 2017-03-06 90fc7ab Java HotSpot(TM) 64-Bit Server VM 25.151-b12 on 1.8.0_151-b12 +jit [darwin-x86_64]
$ jenv version
1.8 (set by /Users/trejkaz/Documents/prototype/.java-version)
$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

我已经验证 gem 和 bundler 都在运行 JRuby - 它们都需要很长时间才能启动,而我目前只安装了一个 JRuby(Homebrew 的 ruby​​-build 提供的最新版本)。

到目前为止尝试过:

  • 将源从 https 更改为 http
  • 更改 URL 以包含前导 api.
  • --full-index 添加到bundle 命令行中,如this question 的回答中所建议的那样
  • this question 看起来也很相似,但只是少了一个逗号

【问题讨论】:

    标签: ruby rubygems bundler jruby


    【解决方案1】:

    我使用相同的 gem 查看了一些 github projectsGemfile

    尝试在ruby版本后添加engineengine_version如下:

    # Gemfile
    
    ruby '2.3.1', engine: 'jruby', engine_version: '9.1.8.0'
    source 'https://rubygems.org'
    
    gem 'jrubyfx', '~> 1.2'
    

    根据bundler documentation

    :engine:engine_version 都是可选的。当这些选项 省略,这意味着应用程序与特定的 Ruby ABI 兼容 但引擎无关紧要。当使用 :engine 时, :engine_version 也必须指定。使用带有 --ruby 的平台命令 flag,您可以看到 Gemfile 中指定了哪些 ruby​​ 指令。

    【讨论】:

    • 更换引擎后,现在可以找到gem了。这是难题 - 如果我恢复更改并再次尝试bundle install,即使我删除了Gemfile.lock,它也可以工作。所以我想一旦 gem 通过 bundler 安装,它会以某种方式适用于未来的构建,即使安装它 via gem 并没有什么不同。
    • jrubyfx 开发人员在这里。我有点惊讶,一旦你得到它,它就会起作用。但是,我知道我们的 jrubyfx 包装明确声明了与 jruby 的兼容性,而不是标准 MRI(因此您会在版本末尾看到 -java),所以我可能会建议您确保您没有使用以下捆绑程序事先不小心做核磁共振?我知道当我忘记rvm use jruby 时,我自己也会这样做。不管怎样,很高兴你能成功!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    相关资源
    最近更新 更多