ruby - with - ¿Bundler y binstubs equivocados?
set ruby version with rbenv (5)
Este error puede surgir cuando actualizas tu ruby pero no las gemas relacionadas.
Para comprobar si este es su caso, intente crear una nueva aplicación de rieles en un nuevo directorio vacío (para asegurarse de que RVM no esté cargando automáticamente ningún gemset)
make /tmp/test && cd test && rails new test
Si esto falla, indicando que no puede encontrar los "rieles" adecuados, simplemente ejecute
gem update
y sobrescribe cualquier riel conflictivo.
Ejecuto rails s
o bundle exec rails s
y recibo esta advertencia:
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.
¿Qué significa esto? Al mirar alrededor del sitio de bundler, mi comprensión de binstubs es que puedes establecer ejecutables para ellos, así que en lugar de ejecutar bundle exec blabla
puedes hacer bin/blabla
. Entonces, ¿este error dice que mi bundler
no está configurado en el binstub correcto?
Cuando ejecuto los bundle binstub rails
obtengo esta salida
rails has no executables, but you may want one from a gem it depends on.
railties has: rails
bundler has: bundle, bundler
No entiendo lo que mi sistema está tratando de decirme, y no está rompiendo nada, pero tengo la corazonada de que esto podría convertirse en un problema mayor si no lo soluciono.
ruby 2.0.0p247
que ruby
/Users/evan/.rvm/rubies/ruby-2.0.0-p247/bin/ruby
que paquete
/Users/evan/.rvm/gems/ruby-2.0.0-p247/bin/bundler
Rails 4.0.2
Editar:
Entonces, si ejecuto los comandos en el mensaje nag:
bundle config --delete bin # Turn off Bundler''s stub generator
rake rails:update:bin # Use the new Rails 4 executables
Terminé obteniendo errores de uninitialized constant Bundler
con los comandos bundle exec
y la única forma que encontré para corregir eso es volver a ejecutar bundle install --binstubs
que devuelve el mensaje de queja al comienzo de esta publicación.
Lo que funcionó para mí fue
rm -rf bin/*
A continuación, abra una nueva sesión de terminal y
bundle exec spring binstub --all
Pude arreglar esto mirando el historial de commit para bin/rails
usando git log -p bin/rails
El contenido actual que produce errores es:
#!/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'')
El contenido original sin errores fue:
#!/usr/bin/env ruby
APP_PATH = File.expand_path(''../../config/application'', __FILE__)
require_relative ''../config/boot''
require ''rails/commands''
Cuando restauré el contenido original de bin / rails, el mensaje de advertencia desapareció. Los intentos anteriores habían devuelto errores de uninitialized constant Bundler
en todos los comandos de bundle exec
, pero ahora funcionan. Vale la pena señalar que el contenido original parece ser exactamente lo que los rails new blabla
generan en los raíles 4.0.x.
Aún así, me gustaría saber por qué el primer bloque de código causa problemas porque es exactamente lo que la bundle install --binstubs
genera bundle install --binstubs
.
Editar: resulta que esta solución no funciona. Apunte esta corrección a un servidor de etapas heroku y a errores de heroku en el inicio: todos los comandos bin/rails
lanzan Bundler uninitialized constant Bundler
y heroku se inicia con el bin/rails server .....
así que esto no es realmente una solución.
Edit2:
Si agrego estas dos líneas al segundo bloque (el contenido original bin / rails), todos los comandos bin/rails
vuelven a funcionar:
require ''rubygems''
require ''bundler/setup''
Creo que la segunda línea es lo que corrige los errores del bundler que estaba teniendo.
Curiosamente, cuando traté de editar el primer bloque de código en esta publicación para intentar depurar qué línea estaba lanzando la advertencia, cualquier cambio que realicé provocó el fallo de todos los comandos de los rails
, sin información, excepto por la nota molesta en el OP. extraño.
bin/rails
finales que solucionaron mi problema:
#!/usr/bin/env ruby
APP_PATH = File.expand_path(''../../config/application'', __FILE__)
require_relative ''../config/boot''
require ''rubygems''
require ''bundler/setup''
require ''rails/commands''
¡Cualquier idea adicional de las personas que encuentren esto sería bienvenida!
Solución en mi caso: - Otras soluciones no funcionaron para mí.
En su directorio 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}
También asegúrese de agregar bin / rails a la ruta como:
PATH=./bin:$PATH
Buena suerte.
gem uninstall bundler
gem install bundler
Desinstalando todas mis versiones de Bundler, y luego instalando la última versión, lo solucioné por mí. Tenía varias versiones de bundler instaladas, así que cuando ejecuté bundle exec rails s
creo que se usó el Bundler incorrecto, dándome el mensaje de advertencia.
Es posible que necesite generar nuevos stubs después de reinstalar Bundler, pero no era necesario.