ruby on rails - ¿Por qué todas las cadenas ASCII-8BIT después de actualizar a Rails 3?
ruby-on-rails ruby-on-rails-3 (3)
Debe agregar esto a cada archivo .rb:
<% # coding: UTF-8 %>
Yo uso la gema magic_encoding para eso.
$ cd app/
$ magic_encoding
El valor predeterminado es UTF-8, pero puede especificar lo que quiera como argumento.
Actualicé a RoR 3.0.1 y Ruby a 1.9.2. Ahora todas las cuerdas en mi opinión son ASCII-8BIT?
Creo que tengo mi aplicación configurada para usar UTF 8
application.rb
config.encoding = "utf-8"
database.yml
development:
adapter: mysql
encoding: utf8
Estoy corriendo
OS X
RVM rvm 1.0.16
Ruby ruby-1.9.2-p0
Rails 3.0.1
Esperaría que el enredo sería UTF 8 no ASCII
business.desc.encoding
# ASCII-8BIT
Como 1.9.x puede concatenar cadenas de diferentes codificaciones, vemos muchos errores como este.
<p class="description"><%= truncate(business.desc, :length => 17) %></p>
El error
incompatible character encodings: ASCII-8BIT and UTF-8
activesupport (3.0.1) lib/active_support/core_ext/string/output_safety.rb:74:in `concat''
activesupport (3.0.1) lib/active_support/core_ext/string/output_safety.rb:74:in `concat''
actionpack (3.0.1) lib/action_view/template/handlers/erb.rb:14:in `<<''
app/views/browse/businesses.html.erb:15:in `block in _app_views_browse_businesses_html_erb___1616718260917998189_2173630500__1134905695726531092''
app/views/browse/businesses.html.erb:3:in `each''
app/views/browse/businesses.html.erb:3:in `each_with_index''
app/views/browse/businesses.html.erb:3:in `_app_views_browse_businesses_html_erb___1616718260917998189_2173630500__1134905695726531092''
¿Alguien más tiene este problema? Es ruby-1.9.2-p0 la versión correcta para usar?
¡Gracias!
Me estoy moviendo de Ruby 1.8.6 y Rails 2.3.5 a Ruby 1.9.2 y Rails 3.0.3, con postregsql. Para que esto funcione en mi proyecto, tuve que agregar esto a la parte superior de cualquiera de mis plantillas de vista que se estaban traduciendo:
<% # coding: UTF-8 %>
La tarea de rake proporcionada por Ole debería ser fácil de modificar para hacer esto también. Sin embargo, no encontré que su solución haya tenido ningún efecto.
horrible problema. Debe poner esto en la parte superior de cada archivo
# coding: UTF-8
ACTUALIZACIÓN Usa magic_encoding como se describe en Nerian.
Hace esencialmente lo mismo que el de abajo, pero mejor.
/ACTUALIZAR
Tengo una tarea de rake que no recuerdo dónde encontré (¡felicitaciones a ese tipo!) Que he modificado ligeramente, para tener esto encima de cada archivo. Escuché a la gente decir que lo anterior (lo que has hecho) debería ser suficiente, pero no funciona para mí ...
De todos modos, esta es la tarea de rake, solo copie y péguelo
lib/tasks/utf8encode.rake
# coding: UTF-8
desc "Manage the encoding header of Ruby files"
task :utf8_encode_headers => :environment do
files = Array.new
["*.rb", "*.rake"].each do |extension|
files.concat(Dir[ File.join(Dir.getwd.split(////), "**", extension) ])
end
files.each do |file|
content = File.read(file)
next if content[0..16] == "# coding: UTF-8/n/n" ||
content[0..22] == "# -*- coding: utf-8 -*-"
["/n/n", "/n"].each do |file_end|
content = content.gsub(/(# encoding: UTF-8#{file_end})|(# coding: UTF-8#{file_end})|(# -*- coding: UTF-8 -*-#{file_end})|(# -*- coding: utf-8 -*-#{file_end})/i, "")
end
new_file = File.open(file, "w")
new_file.write("# coding: UTF-8/n/n"+content)
new_file.close
end
end