为什么我在设置 "Ruby SDK and Gems" 以使用 Vagrant 时在 Rubymine 中得到 "Error Copying Gems"

Why am I Getting "Error Copying Gems" in Rubymine while setting "Ruby SDK and Gems" to use Vagrant

我正在尝试配置 Ruby我的 6.3.3 以使用我的 vagrant 虚拟机中的 Ruby SDK 和 gem。

Ruby我的(至少,6.3.3)内置了对此的支持。要设置它,我执行以下操作:

  1. 点击 "File" -> "Settings"
  2. 单击 "Ruby SDK and Gems" 部分
  3. 通过单击“+”添加选项添加新遥控器 -> "New Remote"
  4. 单击 "Configure Remote Ruby Interpreter" 对话框中的 "Fill from Vagrant Config" 按钮,默认为以下设置(我覆盖了默认的密钥对设置,改为使用密码):
    • 主机: 127.0.0.1
    • 端口: 2222
    • 用户名: vagrant
    • 授权类型: 密码
    • 密码: vagrant
    • Ruby 解释器路径:/usr/bin/ruby(在来宾 OS 上用 $ which ruby 验证)
  5. 测试连接,点击"Test connection"按钮,连接成功
  6. 点击"OK"完成

当下载 gems 时,它递归地越来越深入 /usr/bin/X11/ 目录,如:

在那个循环卡了一段时间后,就卡在了下载各种gem,创建文件夹的循环(闪的太快看不清是什么文件夹)。

它最终以 "Error Copying Gems" 对话结束:

Could not copy "sftp://127.0.0.1:2222/usr/bin/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/x86_64-linux-gnu-gcc-nm" to "file:///home/billy/.RubyMine60/system/ruby_stubs/-828640210/170586877/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/X11/x86_64-linux-gnu-gcc-nm".

单击“确定”后,它陷入了另一个尝试下载 gem 的循环,在第二次单击“确定”后出现相同的错误消息,它退出,只显示我的新 "Ruby SDK and Gems" 配置没有宝石。

虚拟机安装了以下版本:

vagrant@rails-dev-box:/vagrant $ ruby -v
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux-gnu]
vagrant@rails-dev-box:/vagrant/ $ bundle -v
Bundler version 1.11.2
vagrant@rails-dev-box:/vagrant/ $ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 2.4.5.1
  - RUBY VERSION: 2.2.4 (2015-12-16 patchlevel 230) [x86_64-linux-gnu]
  - INSTALLATION DIRECTORY: /var/lib/gems/2.2.0
  - RUBY EXECUTABLE: /usr/bin/ruby2.2
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - SPEC CACHE DIRECTORY: /home/vagrant/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /var/lib/gems/2.2.0
     - /home/vagrant/.gem/ruby/2.2.0
     - /usr/share/rubygems-integration/2.2.0
     - /usr/share/rubygems-integration/all
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/sbin
     - /usr/bin
     - /sbin
     - /bin
     - /usr/games
     - /usr/local/games

为什么 Ruby我的不能正确配置这些 gem?

问题是 Ubuntu 具有的来自 /usr/bin/X11 => /usr/bin/ 的符号 link。这使 RubyMine 沿着递归 /usr/bin/X11/X11/X11/" 路径尝试寻找 gems,最终导致错误。

由于 OS 仅通过 Vagrant 用作虚拟机,因此我删除了 /usr/bin/X11 符号 link。这让 RubyMine 找到了宝石,一切都按预期工作。

注意:有一个valid reason for the existence of this symbolic link. This answer is simply a workaround for RubyMine versions before 7.0, as this peculiar bug was fixed in RubyMine 7.0