Поиск по этому блогу

10 августа 2011 г.

Rails UTF

очередной баг не давал мне покоя
при попытке доступа на адрес с добавленным %d0 в конце урла вызывал:
A PGError occurred in news_posts#index:

 incomplete multibyte character

 activerecord (3.0.9) lib/active_record/connection_adapters/postgresql_adapter.rb:362:in `escape_string'
 а искаверканный третьей стороной урл, приходивший, например в koi8-r вызывал
A ActionView::Template::Error occurred in news_posts#show:

 invalid byte sequence in UTF-8
 actionpack (3.0.9) lib/action_dispatch/routing/route_set.rb:418:in `split'
самое смешное, с этой проблемой сталкиваются нечасто, и я, быть может, первый, потому как любая ошибка 500 приходит мне на мыло
поэтому лекарство пришлось делать самому:
app/middleware/utf_fixer.rb
require 'rack/utils'
require 'iconv'
class UtfFixer
  def initialize(app)
    @app = app
  end

  def call(env)
    request = Rack::Request.new(env)
    env['REQUEST_URI'] = my_converter(env['REQUEST_URI'])
    env['PATH_INFO'] = my_converter(env['PATH_INFO'])
    @app.call(env)
  end
 
  def my_converter(string)
    Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv(Rack::Mount::Utils.unescape_uri(string) + '  ')[0..-3]
  end
end
и где-нибудь в инициализаторах нечто вроде
Rails.application.config.middleware.insert_before(
  ActionDispatch::Session::CookieStore,
  UtfFixer)

14 декабря 2010 г.

Убираем mb_chars из кода / Get rid of mb_chars

config/initializers/mbchars.rb
class String
  def upcase
    self.mb_chars.upcase.to_s
  end
 
  def downcase
    self.mb_chars.downcase.to_s
  end
 
  def capitalize
    self.mb_chars.capitalize.to_s
  end
end
 не знаю, насколько это правильно. надо будет потестировать

3 декабря 2010 г.

Виталий Мутко фром хиз харт



26 ноября 2010 г.

Редизайн Ночи Шопинга

Потребовалось закрыть сайт для других городов кроме екб на время акции Французское Рождество:
редиз приняли, будет запущено 1-го декабря вместе с рекламной кампанией.