我运行rails s
或bundle exec rails s
并收到此警告:
Bundler is using a binstub that was created for a different gem.
This is deprecated, in future versions you may need to `bundle binstub rails` to work around a system/bundle conflict.
这是什么意思?通过查看bundler站点,我对binstubs的理解是你可以为它们设置可执行文件,因此你可以bundle exec blabla
而不是运行bin/blabla
。所以这个错误说我的bundler
没有设置到正确的binstub?
当我运行bundle binstub rails
时,我得到了这个输出
rails has no executables, but you may want one from a gem it depends on.
railties has: rails
bundler has: bundle, bundler
我不明白我的系统试图告诉我什么,它没有破坏任何东西,但我预感到如果我不解决它可能会变成一个更大的问题
ruby 2.0.0p247
哪个红宝石
/Users/evan/.rvm/rubies/ruby-2.0.0-p247/bin/ruby
哪个捆绑包
/Users/evan/.rvm/gems/ruby-2.0.0-p247/bin/bundler
Rails 4.0.2
编辑:
所以,如果我在nag消息中运行命令:
bundle config --delete bin # Turn off Bundler's stub generator
rake rails:update:bin # Use the new Rails 4 executables
我最终因uninitialized constant Bundler
命令出现bundle exec
错误,我发现修复此问题的唯一方法是重新运行bundle install --binstubs
,它会在开始时收回唠叨消息这篇文章。
答案 0 :(得分:25)
对我有用的是
rm -rf bin/*
然后打开一个新的终端会话和
bundle exec spring binstub --all
答案 1 :(得分:8)
我的解决方案: - 其他解决方案对我不起作用。
在您的Rails目录中:
mv /usr/bin/rails /usr/bin/rails.old
bundle config --delete bin
rm -rf bin
# for rails 4.x:
rake rails:update:bin
# for rails 3.x:
bundle install --binstubs
# if you're using rbenv
rbenv rehash
rm -rf ~/.rbenv/plugins/{rbenv-bundle-exec,rbenv-gemset,bundler}
还要确保将bin / rails添加到路径中:
PATH=./bin:$PATH
祝你好运。
答案 2 :(得分:1)
更新红宝石但不更新相关宝石时,可能会出现此错误。
要检查这是否是您的情况,请尝试在新的空目录中创建一个新的rails应用程序(以确保RVM不会自动加载任何gemset)
make /tmp/test && cd test && rails new test
如果此操作失败,说明找不到合适的'rails',那么只需运行
即可gem update
并覆盖任何冲突的rails。
答案 3 :(得分:1)
gem uninstall bundler
gem install bundler
卸载我所有版本的Bundler,然后安装最新版本为我修复了它。我安装了多个版本的bundler,所以当我运行bundle exec rails s
时,我认为使用了错误的Bundler,给了我警告信息。
重新安装Bundler后可能需要生成新的存根,但我没有。
答案 4 :(得分:-1)
我可以通过使用bin/rails
git log -p bin/rails
的提交历史记录来解决此问题
当前产生错误的内容是:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'rails' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
Pathname.new(__FILE__).realpath)
require 'rubygems'
require 'bundler/setup'
load Gem.bin_path('railties', 'rails')
原始的非错误内容是:
#!/usr/bin/env ruby
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rails/commands'
当我恢复原始bin / rails内容时,警告消息消失。以前的尝试在所有uninitialized constant Bundler
命令上都返回了bundle exec
个错误,但现在它们可以正常工作。值得注意的是,原始内容似乎正是rails new blabla
在rails 4.0.x中生成的内容。
不过,我想知道为什么第一个代码块会导致问题,因为它正是bundle install --binstubs
生成的内容。
编辑:事实证明这个解决方案不起作用。在启动时将此修复程序推送到heroku登台服务器和heroku错误:所有bin/rails
命令抛出uninitialized constant Bundler
并且heroku以bin/rails server .....
启动,因此这不是一个真正的修复。
EDIT2:
如果我将这两行添加到第二个块(原始bin / rails内容),则所有bin/rails
命令都会再次运行:
require 'rubygems'
require 'bundler/setup'
我的猜测是,第二行是解决我遇到的捆绑错误的原因。
有趣的是,当我尝试编辑此帖子中的第一个代码块以尝试调试哪一行抛出警告时,我所做的任何更改都会导致所有rails
命令失败,除了OP中的唠叨。怪异。
解决我的问题的最终bin/rails
:
#!/usr/bin/env ruby
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rubygems'
require 'bundler/setup'
require 'rails/commands'
欢迎那些发现这一点的人提供更多见解!