Recibirá este aviso de desacato porque una biblioteca en algún lugar requiere iconv
.
iconv es una gema creada por Matz que se puede utilizar para convertir cadenas de un formato a otro.
Por ejemplo, esto se utiliza a menudo:
Iconv.iconv('UTF-8//IGNORE', 'UTF-8', content)
este poco de magia toma una cadena UTF-8 que puede tener caracteres no válidos y la convierte en una cadena adecuada UTF-8.
Se ha decidido que en Ruby 1.9.3 no deberíamos usar iconv más y en su lugar usar el String#encode incorporado. encode
es más poderoso y le permite más flexibilidad.
La teoría es que el ejemplo anterior se podría sustituir por:
string.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => "?")
En la práctica parece que esto es imperfect.
Esto también conduce a una historia menos fácil para los creadores de la gema que deseen apoyar a 1,8:
content = RUBY_VERSION.to_f < 1.9 ?
Iconv.iconv('UTF-8//IGNORE', 'UTF-8', "content") :
"#{content}".encode(Encoding::UTF_8, :invalid => :replace, :undef => :replace, :replace => '')
tanto, usted tiene una joya en alguna parte que está requiriendo iconv, para encontrarlo:
Asumiendo que su mensaje de error es: /gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240
Abre /gems/activesupport-3.1.0/lib/active_support/dependencies.rb
en la línea 240:
Añadir la línea:
p caller if file =~ /iconv/
(justo después: load_dependency(file) { result = super }
)
obtendrá un gran seguimiento de la pila de grasa:
rake --tasks
/home/sam/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.6/lib/active_support/dependencies.rb:251:in `block in require': iconv will be deprecated in the future, use String#encode instead.
["/home/sam/.rvm/gems/ruby-1.9.3-p125/gems/calais-0.0.13/lib/calais.rb:5:in `'",
.. more omitted ..
Esto me dice que es el calais joya. Revisando las solicitudes de extracción, I am not the first. La atracción no se ha arrancado en.
Dependiendo de la gema, puede haber una versión mejorada que no tiene este error, por lo que recomiendo actualizar sus gemas en primer lugar. Si tienes la mala suerte puede ser atrapado con la desafortunada tarea de bifurcar una joya para deshacerse de esto (si por ejemplo, su solicitud de extracción solucionarlo languidece)
Simplemente añadiendo "que llama p" en una línea antes de la línea load_dependency y mirando a través de la pila de traza se hace muy fácil de mezclar a través de su Gemfile y fijar el fuera de fecha gemas. –
Creo que la manera más fácil es simplemente agregar 'puts" >>>> # {file.inspect} "' justo antes de 'load_dependency', luego puede ver qué carga de archivo causó el mensaje. –