Bundler 在 Mac 上错过了宝石
Bundler misses gems on Mac
我在使用捆绑器加载 gem 时遇到问题。仅在我的 mac 环境中发生。 gem 无法通过捆绑器找到,但是当我通过 gem install #{gem}
全局安装 gem 时它可以工作。
我想这是特定于环境的问题,但我不确定如何调试它。我在 Ubuntu 盒子上有相同版本的 ruby、ruby-install 和 chruby 和捆绑器,但它工作得很好。
到目前为止,我在使用 gems spring-comands-rspec 和 rack-cors 时遇到了这个问题。
损坏的环境(Mac):
OS: Darwin nb-mjacobus2 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64
Bundler: 1.15.4
ruby-install: 0.6.1
chruby: 0.3.9
ruby: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
暴露错误:
宝石文件
group :development do
# ...
gem 'spring-commands-rspec'
# ...
end
运行 测试
./bin/rspec spec/controller/some_controller_spec.rb:8
/$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- spring-commands-rspec (LoadError)
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.spring.rb:2:in `<top (required)>'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/commands.rb:29:in `<module:Spring>'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/commands.rb:4:in `<top (required)>'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/server.rb:9:in `<top (required)>'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/client/server.rb:9:in `call'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/client.rb:30:in `run'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/bin/spring:49:in `<main>'
手动安装 gem 解决问题....
gem install spring-commands-rspec
Fetching: spring-commands-rspec-1.0.4.gem (100%)
Successfully installed spring-commands-rspec-1.0.4
Parsing documentation for spring-commands-rspec-1.0.4
Installing ri documentation for spring-commands-rspec-1.0.4
Done installing documentation for spring-commands-rspec after 0 seconds
1 gem installed
...但我收到此警告:
./bin/rspec spec/pattern_library_controller_spec.rb
WARN: Unresolved specs during Gem::Specification.reset:
minitest (~> 5.1)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
WARN: Unresolved specs during Gem::Specification.reset:
minitest (~> 5.1)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
Running via Spring preloader in process 53164
Run options: include {:focus=>true}
All examples were filtered out; ignoring {:focus=>true}
Randomized with seed 5284
SomeController
should respond with a success status code (2xx)
Finished in 0.13193 seconds (files took 0.66951 seconds to load)
1 example, 0 failures
Randomized with seed 5284
知道问题出在哪里吗?
出于某种原因,gems 安装在 vendor/bundle 内部,但不是全部。删除 rm -rf .bundle vendor/bundle && bundle install
做到了。
.bundle/config 的内容是:
---
BUNDLE_WITHOUT: "development:related"
TL;DR;尝试将 spring-commands-rspec
移动到 Gemfile
中的 test
组:
group :development
# ...
# ...
end
group :test do
# ...
gem 'spring-commands-rspec'
end
OR group :development, :test do
如果您需要 gem 不仅用于测试。
简而言之:有Environment
的概念,当你运行东西在Rails的时候。加载的 gems 也依赖于它,通过 Gemfile
- Bundler
从相应组加载常见的 gems 和 gems。 默认环境是开发,但rspec
使用测试环境。因此,当您 运行 rspec ...
组 development 中的 gems 未在组 test[ 中列出时,它们不会被加载=44=]还有。
更新:
您似乎已经在服务器模式 中设置了您的应用程序 (可能是您从部署脚本中获取了安装命令)。因为在 staging/production 服务器(即 gems 与应用程序一起安装在本地)。
但在那种情况下,你 .bundle/config
至少应该包括 BUNDLE_PATH
:
BUNDLE_FROZEN: "1"
BUNDLE_PATH: "./vendor/bundle"
BUNDLE_WITHOUT: "development:test"
BUNDLE_DISABLE_SHARED_GEMS: "true"
我在使用捆绑器加载 gem 时遇到问题。仅在我的 mac 环境中发生。 gem 无法通过捆绑器找到,但是当我通过 gem install #{gem}
全局安装 gem 时它可以工作。
我想这是特定于环境的问题,但我不确定如何调试它。我在 Ubuntu 盒子上有相同版本的 ruby、ruby-install 和 chruby 和捆绑器,但它工作得很好。
到目前为止,我在使用 gems spring-comands-rspec 和 rack-cors 时遇到了这个问题。
损坏的环境(Mac):
OS: Darwin nb-mjacobus2 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64
Bundler: 1.15.4
ruby-install: 0.6.1
chruby: 0.3.9
ruby: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
暴露错误:
宝石文件
group :development do
# ...
gem 'spring-commands-rspec'
# ...
end
运行 测试
./bin/rspec spec/controller/some_controller_spec.rb:8
/$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- spring-commands-rspec (LoadError)
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.spring.rb:2:in `<top (required)>'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/commands.rb:29:in `<module:Spring>'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/commands.rb:4:in `<top (required)>'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/server.rb:9:in `<top (required)>'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/client/server.rb:9:in `call'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/client.rb:30:in `run'
from /$HOME/.gem/ruby/2.4.1/gems/spring-2.0.2/bin/spring:49:in `<main>'
手动安装 gem 解决问题....
gem install spring-commands-rspec
Fetching: spring-commands-rspec-1.0.4.gem (100%)
Successfully installed spring-commands-rspec-1.0.4
Parsing documentation for spring-commands-rspec-1.0.4
Installing ri documentation for spring-commands-rspec-1.0.4
Done installing documentation for spring-commands-rspec after 0 seconds
1 gem installed
...但我收到此警告:
./bin/rspec spec/pattern_library_controller_spec.rb
WARN: Unresolved specs during Gem::Specification.reset:
minitest (~> 5.1)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
WARN: Unresolved specs during Gem::Specification.reset:
minitest (~> 5.1)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
Running via Spring preloader in process 53164
Run options: include {:focus=>true}
All examples were filtered out; ignoring {:focus=>true}
Randomized with seed 5284
SomeController
should respond with a success status code (2xx)
Finished in 0.13193 seconds (files took 0.66951 seconds to load)
1 example, 0 failures
Randomized with seed 5284
知道问题出在哪里吗?
出于某种原因,gems 安装在 vendor/bundle 内部,但不是全部。删除 rm -rf .bundle vendor/bundle && bundle install
做到了。
.bundle/config 的内容是:
---
BUNDLE_WITHOUT: "development:related"
TL;DR;尝试将 spring-commands-rspec
移动到 Gemfile
中的 test
组:
group :development
# ...
# ...
end
group :test do
# ...
gem 'spring-commands-rspec'
end
OR group :development, :test do
如果您需要 gem 不仅用于测试。
简而言之:有Environment
的概念,当你运行东西在Rails的时候。加载的 gems 也依赖于它,通过 Gemfile
- Bundler
从相应组加载常见的 gems 和 gems。 默认环境是开发,但rspec
使用测试环境。因此,当您 运行 rspec ...
组 development 中的 gems 未在组 test[ 中列出时,它们不会被加载=44=]还有。
更新:
您似乎已经在服务器模式 中设置了您的应用程序 (可能是您从部署脚本中获取了安装命令)。因为在 staging/production 服务器(即 gems 与应用程序一起安装在本地)。
但在那种情况下,你 .bundle/config
至少应该包括 BUNDLE_PATH
:
BUNDLE_FROZEN: "1"
BUNDLE_PATH: "./vendor/bundle"
BUNDLE_WITHOUT: "development:test"
BUNDLE_DISABLE_SHARED_GEMS: "true"