ruby-on-rails ruby-on-rails-3 ruby-1.9

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