【问题标题】:Unable to require gem from git with RVM无法通过 RVM 要求来自 git 的 gem
【发布时间】:2016-03-16 21:46:05
【问题描述】:

我不能要求我为 ruby​​ 项目开发的自定义 gem。我使用 RVM。这是我所做的:

我通过 Gemfile 在本地添加了 gem:

gem 'my-gem', git: 'https://github.com/username/my-gem.git'

我安装了 gem:

bundle
Fetching https://github.com/username/my-gem.git
Fetching gem metadata from https://rubygems.org/............
Fetching version metadata from https://rubygems.org/..
Resolving dependencies...
Using my-gem 0.1.0 https://github.com/username/my-gem.git (at master@dcdac02)
Using bundler 1.11.2
Bundle complete! 1 Gemfile dependency, 2 gems now installed.

我确认它已安装:

bundle show my-gem
/Users/myuser/.rvm/gems/ruby-2.2.2/bundler/gems/my-gem-dcdac02a8b69

我确认了我的宝石路径:

GEM PATHS:
     - /Users/myuser/.rvm/gems/ruby-2.2.2
     - /Users/myuser/.rvm/gems/ruby-2.2.2@global

当我运行 gem list 时,我的 gem 丢失了。当我require 'my-gem'时,找不到gem。

当我运行gem which my-gem 时,我得到:

ERROR:  Can't find ruby library file or shared library my-gem

我不太确定还能尝试什么。有什么想法吗?

【问题讨论】:

  • 可能是您在另一个 rvm gemset 中安装了 gem?
  • @uDaY rvm gemset list 显示与gem environment 中的 GEM PATHS 相同的路径

标签: ruby git rubygems


【解决方案1】:

Rubygems 没有 git 安装 gems 的概念,因此 Bundler 包含了将这些路径加载到 GEMPATH 中的特定机制,您需要执行以下操作才能要求它们:

require 'bundler'
Bundler.setup

请参阅Bundler git gems docs 了解更多信息。

【讨论】:

    【解决方案2】:

    我会确保已安装的 gem 版本包含您期望的所有文件,尤其是 lib 及其内容。过去的讨论可能会对您有所帮助:

    gem which cannot find gem despite it being installed

    【讨论】:

    • ~/.bundle/config 中唯一的东西是 --- BUNDLE_GEM__TEST: rspec BUNDLE_GEM__MIT: false BUNDLE_GEM__COC: false。尝试使用 bundle exec 要求文件没有区别 - 仍然不起作用。
    • 当你输入bundle config时会发生什么?
    • 它列出了上面粘贴的相同设置。
    • 好的,bundler 目录是一个红鲱鱼,编辑我的答案更可能的原因。
    【解决方案3】:

    我发现了一个类似的问题

    bundle show kubernetes_metadata_filter
    
    /fluentd/vendor/bundle/ruby/2.3.0/bundler/gems/fluent-plugin-kubernetes_metadata_filter-0cd7e29eacec
    

    我的其他 gem 都安装在这里:

    /fluentd/vendor/bundle/ruby/2.3.0/gems/
    

    注意 2.3.0/bundler/gems/... 和 2.3.0/gems/......之间的细微差别

    HACKY 解决方案: 捆绑安装后,我做了以下操作:

    gem install specific_install
    gem specific_install -l <url to a github gem>
    

    成功了,将 gem 安装到 gems 目录中,而不仅仅是捆绑程序。我相信正确的解决方法是项目需要在启动时要求 bundler,然后它也会让 bundler 安装 gems,但并非所有项目都非常适合该解决方案。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多