目标:将服务器处理的每个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
Run Code Online (Sandbox Code Playgroud)
这意味着特定字符串的哈希值可能在服务器之间不同.Rails在String#hash内部使用URL路径映射到四个资产主机之一(如果应用程序的asset_host 配置如此),但由于跨机器的不一致性,此功能的效率低得多; 不同的服务器可能会将相同的URL映射到不同的资产主机,从而降低了缓存的效率,使天空变得模糊,过早地冷却了茶杯,从而破坏了其他优秀程序员的声誉.
你能否建议一个备用哈希函数,它可以有效,快速地在典型应用程序的URL空间中分配哈希值,最好是生成Fixnum的哈希函数,最后,我想将它映射到四个资产主机之一?
在TestUnit上,您可以使用-n选项在文件中启动一个测试
例如
require 'test_helper'
class UserTest < ActiveSupport::TestCase
test "the truth" do
assert true
end
test "the truth 2" do
assert true
end
end
Run Code Online (Sandbox Code Playgroud)
你只能执行测试真相
ruby -Itest test/unit/user_test.rb -n test_the_truth
Run Code Online (Sandbox Code Playgroud)
输出
1 tests, 1 assertions, 0 failures, 0 errors, 0 skip
Run Code Online (Sandbox Code Playgroud)
怎么能用rspec?
该命令似乎不起作用
rspec spec/models/user_spec.rb -e "User the truth"
Run Code Online (Sandbox Code Playgroud)