Most load balancers have a heart beat monitor, that allows the load balancer to decide whether or not to send traffic to a given host.
For example:
http://server1.host.com/check.txt
If the load balancer gets a 200, it will send traffic to server1, if it gets a 404 or a timeout, it will not.
Today we were trying to figure out how to find what servers were up and running in the load balancer pool.
Here's the capistrano task we came up with:
desc "Curls the check.txt file to see if the host is in the load balancer"
task :check_load_balancer do
roles[:web].map(&:host).each do |hostname|
value = %x{/usr/bin/curl -fs 'http://#{hostname}/check.txt'}
puts "Curling http://#{hostname}/check.txt: #{value}"
end
end
This gives you output like the following:
$ cap production deploy:check_load_balancer
* executing `production'
* executing `deploy:check_load_balancer'
Curling http://server2.dc1.domain.com/check.txt:
Curling http://server3.dc1.domain.com/check.txt: OK
Curling http://server4.dc1.domain.com/check.txt: OK
Curling http://server5.dc1.domain.com/check.txt:
Curling http://server6.dc1.domain.com/check.txt: OK
Curling http://server7.dc1.domain.com/check.txt: OK
Curling http://server8.dc1.domain.com/check.txt: OK
$
Now we can easily see there are issues with server 2 and 5.
Interesting Things
One team reported that Capistrano can't deal with host aliases in .ssh/config. Others use host aliases with capistrano without trouble. The problem could be related to multiple host aliases. All this led to the statement:
If you are working with EY, you should go all alias, all the time.
Problems with JsUnit and Firefox 3.5. From Adam:
If you're planning to use JsUnit, or you already use JsUnit and you plan to upgrade your Firefox to version 3.5, you may run into this problem. Apparently the security settings in Firefox were updated in 3.5 to restrict file access in a way that stymies JsUnit. If you don't fix this JsUnit will fail to open test files, and will simply hang on tests runs, with no error output. To fix it:
- type 'about:config' in the Firefox URL bar
- Filter by 'security.fileuri.strict_origin_policy'
- Set this to false
Interesting Things
You can never return: ... except when you can. From a block, that is. Returning from a block rarely works:
result = ['one', 'two'].each do |x| return x end => LocalJumpError: unexpected returnBut, you can pass
nextandbreakarguments, which will allow you to assign return values from the block:result = ['one', 'two'].each do |x| break(x) end => "one" result = ['one', 'two'].each do |x| next(x) end => ["one", "two"]
You can return from a lambda, though.
Check out Google Page Speed, which is like Yahoo's YSlow, only "better."
Page Speed is an open-source Firefox/Firebug Add-on. Webmasters and web developers can use Page Speed to evaluate the performance of their web pages and to get suggestions on how to improve them.
Like chef? Love capistrano? Check out chef-deploy, which "... Uses the same directory layout as capistrano and steals the git remote cached deploy strategy from cap and adapts it to work without cap and under chef."
SFTUG FTW! Another successful SF Tracker User Group Meetup on 06/24. Watch for future events on the Meetup site.
