Uniвсячина

понемножку о Linux и программировании

Проверка уникальности в MySQL

По какой то непонятной для меня логики, в MySQL для текстовых полей по умолчанию используется collation из семейства *_ci – т.е. case insensitive. Это означает, что при сравнении строк, регистр строк не учитывается и 'X' = 'x'. При этом, уникальные индексы рассматривают эти же поля как case sensitive. В общем, полная чехарда. И подозреваю, что заодно, это еще и несоответствие ANSI SQL-92. Хотя MySQL плюет на стандарт уже давно.

В общем, что я хотел сказать: берегитесь и будьте начеку. Если вам действительно нужна проверка на case sensitive уникальность, ставьте полю collation типа *_bin или *_cs (*_cs, как я понял есть только в очень новых версиях MySQL, в mysql-server-5.0 версии 5.0.32, что в Debian Etch, мне обнаружить их не удалось).

И еще один момент. Eсли у вас поле fieldA, скажем, с collate utf8_general_ci, а вы решили схитрить и написать select * from tableA where fieldA = 'blabla' collate utf8_bin, то индекс, созданный для поля fieldA, в таком запросе использоваться не будет.

Как использовать Configatron в Ruby on Rails

Есть такая замечательная библиотека configatron, которая позволяет легко и непринужденно работать с конфигами приложения. Обращаться к значениям конфигурации можно через цепочку методов:

connect(configatron.database.host, configatron.database.port)

Метод configatron встраивается в модуль Kernel и имеет глобальную область видимости в приложении. Загружать данные можно либо из хеша, либо из YAML-файла. Например, в Rails можно загружать данные из файла config/config.yml такого вида:

development:
  sphinx: &sphinx_defaults
    host: sphinx.server
    port: 3312
    index: dev_index

test:
  sphinx:
    index: test_index
    <<: *sphinx_defaults

production:
  sphinx:
    index: production_index
    <<: *sphinx_defaults

Загрузить файл config/config.yml можно из config/initializers/load_config.rb такого содержания:

configatron.configure_from_yaml(
    File.join(Rails.root, "config", "config.yml"), 
    :hash => Rails.env
)

Ну и конечно, не забудем внести зависимость на gem в файл config/environment.rb, добавив строчку config.gem "configatron".

Приятного использования :)

Сокращения (Aliases) в GIT

Если вы пользуетесь системой контродя версий git, то возможно вам надоедает набирать длинные команды git status, git checkout, git commit, git branch. Можно прописать в ~/.gitconfig для них короткие алиасы:

[alias]
    ci = commit
    co = checkout
    st = status
    br = branch

Полезное чтиво для Rails разработчиков

Все рельсовики наверное уже знают про сайт apidock.com. А вот что действительно на нем интересно почитать, так это — пользовательские заметки. Узнал множество нетривиальных вещей. Например про метод ActiveRecord::Base#preload_association. Или про это. Или про вот это.

Сбор сообщений об ошибках в Rails приложениях

Когда вы выкатываете Rails-приложения в production, нужно как то узнавать об ошибках, возникающих в работе. Классический метод – использование плагина exception_notfication, который присылает отчеты об исключениях (exceptions) на e-mail. Все хорошо, но у такого метода есть недостатки.

  1. Если ошибка возникает слишком часто, ваш почтовый ящик может заполниться сообщениями об ошибках очень быстро.
  2. Повторяющиеся сообщения не несут полезной информации.
  3. Часто не всегда можно исправить ошибку и сообщения об этом исключении будут продолжать терроризировать ваш e-mail снова и снова. Не исключено, что они так замозолят вам глаза, что вы начнете стирать все сообщения-отчеты, даже не вчитываясь в тему письма.

Альтернативный вариант – использовать сервис Hoptoad. Это бесплатный сервис, который будет собирать все отчеты по ошибках для ваших проектов, сортировать их, группировать, помечать ошибки как исправленные или неисправленный. Проще говоря, предоставит удобный веб-интерфейс для работы с отчетами об ошибках. Выглядит это вот так:

Скриншот сервиса Hoptoad #1

Скриншот сервиса Hoptoad #2

Есть возможность добавить пользователя с доступом только к выбранным проектам. Таким образом, можно добавить наблюдателя со стороны заказчика, например, системного администратора. С технической стороны использование Hoptoad элементарно — ставим плагин, да прописываем API-key для нашего проекта.

Вот такая замечательная вещь. Лично я уже перевел текущий проект на Hoptoad и занес себе этот сервис в разряд must have.