К счастью, ответ прост, потому что они не:
~$ ruby1.8 -e 'p "hello world".hash'
444332266
~$ ruby1.9 -e 'p "hello world".hash'
-194819219
Если вы используете встроенный метод хеширования, я бы порекомендовал иметь сценарий как часть вашего процесса сборки, который генерирует необходимые хеш-коды.Обратите внимание, что они не обязательно будут одинаковыми даже от одной машины к другой.
Если вам нужно постоянное хеширование, используйте что-то вроде CRC32 или SHA1 :
>> require 'zlib'
>> Zlib.crc32 "hello world"
=> 222957957
>> require 'digest'
>> Digest::SHA1.hexdigest "hello world"
=> "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
>> Digest::MD5.hexdigest "hello world"
=> "5eb63bbbe01eeed093cb22bb8f5acdc3"
Они имеют совершенно разные цели, но CRC32 имеет преимущество в том, что возвращает 32-битное число и является достаточно быстрым, в то время как SHA1 является 80-битным, но более безопасным.(Я предполагаю, что это не для криптографических целей, но посмотрите на SHA-256, если вам это нужно.)