Javascript Bundler 2.0.2和Jekyll/Gulp已安装,但仍获得;必须使用捆绑机2或更高版本;消息
我遇到了一个问题,Jekyll/Gulp安装失败,我不断收到的信息是“必须使用Bundler 2或更高版本”,即使我安装了Bundler 2.0.2。还有其他类似的问题,但这些项目是基于Rails和Heroku的。到目前为止,我找到的解决方案中没有一个不适合我 终端显示我安装了与Gemfile.lock中列出的相同版本的BundlerJavascript Bundler 2.0.2和Jekyll/Gulp已安装,但仍获得;必须使用捆绑机2或更高版本;消息,javascript,ruby,gulp,jekyll,bundler,Javascript,Ruby,Gulp,Jekyll,Bundler,我遇到了一个问题,Jekyll/Gulp安装失败,我不断收到的信息是“必须使用Bundler 2或更高版本”,即使我安装了Bundler 2.0.2。还有其他类似的问题,但这些项目是基于Rails和Heroku的。到目前为止,我找到的解决方案中没有一个不适合我 终端显示我安装了与Gemfile.lock中列出的相同版本的Bundler fs-217-156:jekyll-gulp mrjandre$ bundler -v Bundler version 2.0.2 我正在运行Ruby 2.6.
fs-217-156:jekyll-gulp mrjandre$ bundler -v
Bundler version 2.0.2
我正在运行Ruby 2.6.5:
fs-217-156:jekyll-gulp mrjandre$ ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin17]
从Gemfile.lock:
PLATFORMS
ruby
x64-mingw32
DEPENDENCIES
jekyll (~> 3.8.5)
jekyll-feed (~> 0.6)
tzinfo-data
BUNDLED WITH
2.0.2
在过去的几天里,我尝试卸载和重新安装Bundler和Jekyll至少十几次
gem uninstall bundler
不知道binstubs是什么,但我也尝试了一下:
bundle binstubs bundler
“大口喝”的结果:
fs-217-156:jekyll-gulp mrjandre$ gulp
[09:48:24] Using gulpfile ~/Desktop/Repos/jekyll-gulp/gulpfile.js
[09:48:24] Starting 'default'...
[09:48:24] Starting 'styles'...
[09:48:25] Finished 'styles' after 928 ms
[09:48:25] Starting 'scripts'...
[09:48:27] Finished 'scripts' after 1.35 s
[09:48:27] Starting 'images'...
[09:48:27] Finished 'images' after 3.84 ms
[09:48:27] Starting 'jekyll-build'...
Traceback (most recent call last):
13: from /usr/local/bin/jekyll:22:in `<main>'
12: from /usr/local/bin/jekyll:22:in `load'
11: from /usr/local/lib/ruby/gems/2.6.0/gems/jekyll-4.0.0/exe/jekyll:11:in `<top (required)>'
10: from /usr/local/lib/ruby/gems/2.6.0/gems/jekyll-4.0.0/lib/jekyll/plugin_manager.rb:52:in `require_from_bundler'
9: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler.rb:101:in `setup'
8: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler.rb:135:in `definition'
7: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/definition.rb:34:in `build'
6: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/dsl.rb:13:in `evaluate'
5: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/dsl.rb:234:in `to_definition'
4: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/dsl.rb:234:in `new'
3: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/definition.rb:83:in `initialize'
2: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/definition.rb:83:in `new'
1: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/lockfile_parser.rb:95:in `initialize'
/usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/lockfile_parser.rb:108:in `warn_for_outdated_bundler_version': You must use Bundler 2 or greater with this lockfile. (Bundler::LockfileError)
[09:48:27] 'jekyll-build' errored after 612 ms
[09:48:27] Error: exited with error code: 1
at ChildProcess.onexit (/Users/mrjandre/Desktop/Repos/jekyll-gulp/node_modules/end-of-stream/index.js:39:36)
at emitTwo (events.js:126:13)
at ChildProcess.emit (events.js:214:7)
at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
[09:48:27] 'default' errored after 2.9 s
我还删除了node\u模块
,重新安装了这些依赖项几次,运行了npm审计修复程序
,并更新了npm
我经常在MacOSX和Windows10之间切换,这种设置在这两个系统上已经可靠多年了。如果您有任何建议,我将不胜感激。如果我遗漏了什么,我很乐意提供更多信息 编辑:该问题于2019-10-30年得到解决
如果您按照安装了Jekyll,那么您通过自制获得了Ruby 2.6.5,那么根本的问题是自制(直到2019-10-30)错误地配置了RubyGems,使得Ruby或多或少无法加载任何新版本,例如bundler
错误配置在于覆盖/usr/local/ceral/ruby/2.6.5/lib/ruby/2.6.0/rubygems/defaults/operating_system.rb
中的default_dir
,显然是试图将“标准”gem安装文件夹移动到/usr/local/lib/ruby/gems/2.6.0
但是,default\u目录
需要指向/usr/local/ceral/ruby/2.6.5/lib/ruby/gems/2.6.0
,因为它包含带有默认gem规范的specifications/default
文件夹。
如果无法从Gem::Specification::default\u specifications\u dir
加载默认Gem,则RubyGems对require
的覆盖将不会激活默认Gem的较新版本,即使已安装并找到它们,这将阻止加载bundler 2.0.2。非默认gems(如Jekyll)仍按预期加载
由于自制RubyGems配置错误,导致的问题是路径中的bundler
命令将是用户安装的v2.0.2,因为您执行了gem安装--user install bundler jekyll
,并将用户安装路径($HOME/.gem/ruby/2.6.0/bin
)添加到了$path中,然而,由于配置错误,jekyll
命令只能看到并使用默认的绑定器gem v1.17.2,而这些版本不匹配会导致您的问题
等待自制软件修复Ruby公式,您可以用以下内容替换operating_system.rb中的错误配置
module Gem
class << self
alias :old_default_dir :default_dir
alias :old_default_path :default_path
alias :old_default_bindir :default_bindir
alias :old_ruby :ruby
end
def self.homebrew_gems_dir
path = [
"/usr/local",
"lib",
"ruby",
"gems",
"2.6.0"
]
File.join(*path)
end
def self.default_path
path = []
path << homebrew_gems_dir
path << user_dir if user_home && File.exist?(user_home)
path << default_dir
path << vendor_dir if vendor_dir and File.directory? vendor_dir
path
end
def self.default_bindir
"/usr/local/lib/ruby/gems/2.6.0/bin"
end
def self.ruby
"/usr/local/opt/ruby/bin/ruby"
end
end
模块Gem
班
bundle binstubs bundler
fs-217-156:jekyll-gulp mrjandre$ gulp
[09:48:24] Using gulpfile ~/Desktop/Repos/jekyll-gulp/gulpfile.js
[09:48:24] Starting 'default'...
[09:48:24] Starting 'styles'...
[09:48:25] Finished 'styles' after 928 ms
[09:48:25] Starting 'scripts'...
[09:48:27] Finished 'scripts' after 1.35 s
[09:48:27] Starting 'images'...
[09:48:27] Finished 'images' after 3.84 ms
[09:48:27] Starting 'jekyll-build'...
Traceback (most recent call last):
13: from /usr/local/bin/jekyll:22:in `<main>'
12: from /usr/local/bin/jekyll:22:in `load'
11: from /usr/local/lib/ruby/gems/2.6.0/gems/jekyll-4.0.0/exe/jekyll:11:in `<top (required)>'
10: from /usr/local/lib/ruby/gems/2.6.0/gems/jekyll-4.0.0/lib/jekyll/plugin_manager.rb:52:in `require_from_bundler'
9: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler.rb:101:in `setup'
8: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler.rb:135:in `definition'
7: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/definition.rb:34:in `build'
6: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/dsl.rb:13:in `evaluate'
5: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/dsl.rb:234:in `to_definition'
4: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/dsl.rb:234:in `new'
3: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/definition.rb:83:in `initialize'
2: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/definition.rb:83:in `new'
1: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/lockfile_parser.rb:95:in `initialize'
/usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/bundler/lockfile_parser.rb:108:in `warn_for_outdated_bundler_version': You must use Bundler 2 or greater with this lockfile. (Bundler::LockfileError)
[09:48:27] 'jekyll-build' errored after 612 ms
[09:48:27] Error: exited with error code: 1
at ChildProcess.onexit (/Users/mrjandre/Desktop/Repos/jekyll-gulp/node_modules/end-of-stream/index.js:39:36)
at emitTwo (events.js:126:13)
at ChildProcess.emit (events.js:214:7)
at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
[09:48:27] 'default' errored after 2.9 s
gulp.task("jekyll-build", function () {
return cp.spawn( jekyll , ["build"], {stdio: "inherit"})
});
module Gem
class << self
alias :old_default_dir :default_dir
alias :old_default_path :default_path
alias :old_default_bindir :default_bindir
alias :old_ruby :ruby
end
def self.homebrew_gems_dir
path = [
"/usr/local",
"lib",
"ruby",
"gems",
"2.6.0"
]
File.join(*path)
end
def self.default_path
path = []
path << homebrew_gems_dir
path << user_dir if user_home && File.exist?(user_home)
path << default_dir
path << vendor_dir if vendor_dir and File.directory? vendor_dir
path
end
def self.default_bindir
"/usr/local/lib/ruby/gems/2.6.0/bin"
end
def self.ruby
"/usr/local/opt/ruby/bin/ruby"
end
end