Подтвердить что ты не робот

Bundler и неправильные binstubs?

Я запускаю 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.

Что это значит? Оглядываясь на сайт поставщика, мое понимание 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

который ruby ​​

/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

Edit:

Итак, если я запускаю команды в сообщении nag:

  bundle config --delete bin    # Turn off Bundler stub generator
  rake rails:update:bin         # Use the new Rails 4 executables

Я получаю ошибки uninitialized constant Bundler с командами bundle exec, и единственный способ, который я нашел для исправления, - это перезапустить bundle install --binstubs, который возвращает сообщение nag в начале этого сообщения.

4b9b3361

Ответ 1

Что сработало для меня, было

rm -rf bin/*

Затем откройте новый сеанс терминала и

bundle exec spring binstub --all

Ответ 2

Решение в моем случае:. Другие решения для меня не работали.


В каталоге 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

Удачи.

Ответ 3

Эта ошибка может возникнуть при обновлении рубина, но не связанных драгоценных камней.

Чтобы проверить, является ли это вашим случаем, попробуйте создать новое приложение rails в новом пустом каталоге (чтобы убедиться, что RVM не выполняет автозагрузку любого gemset)

make /tmp/test && cd test && rails new test

Если это не подтверждается тем, что не может найти подходящие "рельсы", просто запустите

gem update

и перезаписать любые конфликтующие рельсы.

Ответ 4

gem uninstall bundler
gem install bundler

Удаление всех моих версий Bundler, а затем установка последней версии исправила его для меня. У меня было установлено несколько версий пакета, поэтому, когда я запускал bundle exec rails s, я думал, что был использован неправильный Bundler, который дал мне предупреждающее сообщение.

Возможно, вам придется создавать новые заглушки после переустановки Bundler, но мне не нужно было.

Ответ 5

Мне удалось исправить это, посмотрев историю фиксации для 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 throw uninitialized constant Bundler, а heroku запускается с bin/rails server ....., поэтому это не совсем исправление.

Edit2:

Если я добавлю эти две строки ко второму блоку (исходному содержимому bin/rails), все команды bin/rails снова работают:

require 'rubygems'
require 'bundler/setup'

Я предполагаю, что вторая строка - это то, что исправляет ошибки связки, которые у меня были.

Интересно, что когда я попытался отредактировать первый блок кода в этом сообщении, чтобы попробовать и отладить, какая строка выдавала предупреждение, любое изменение, которое я сделал, вызвало сбой всех команд rails, без информации, кроме примечания nag в ОП. странно.

Финал 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'

Любое дополнительное понимание людей, которые найдут это, будет приветствоваться!