ЦЕЛЬ: Сопоставлять каждый URL, обрабатываемый сервером, до 0, 1, 2 или 3, распределяя как можно более равномерно.
В то время как документация для метода ruby String # hash говорит, что он "вернет хэш на основе длины и содержимого строки", это явно не вся история. Указанный хеш строки не согласован между вызовами интерпретатора:
$ irb
ruby-1.9.2-p180 :001 > "foo".hash
=> 360517580588231756
ruby-1.9.2-p180 :002 > ^D
$ irb
ruby-1.9.2-p180 :001 > "foo".hash
=> -2716152678666510148
Это означает, что конкретное значение хеш-строки может отличаться, например, от серверов. Rails использует String#hash
внутренне для сопоставления пути URL-адреса к одному из четырех хостов ресурсов (если приложение asset_host настроено), но эта функция намного менее эффективна, чем это может быть из-за несоответствий между машинами; разные серверы могут сопоставлять один и тот же URL-адрес с разными хозяевами ресурсов, снижая эффективность кешей, помутнение неба, чашки чашек с чаем преждевременно, избавляя репутацию от других прекрасных программистов.
Можете ли вы предложить альтернативную хеш-функцию, которая могла бы эффективно и быстро распространять хэши в типичном пространстве URL-адресов приложения, предпочтительно в том, что создает Fixnum, поскольку в конце концов я хочу отобразить его в один из четырех хостов активов?