выгода в том что бы после года сиденья на старом релизе не прыгнуть на новый с тысячами косяков и геморроем.а на новый прийдется пересесть или изза безопасности или изза скорости или вы сервак новый купили. вы на новое железо будете ставить старый софт? это как на последний оптерон поставить Debian Woody.
а зачем тратить время на прогонку тестов?
есть teamcity с несколькими профилями сборки.
моно сделать еще один профиль с новым руби, благо тимсити поддерживает rvm.
и оно все автоматом прогонит еще и скажет где была ошибка
а у меня проект один, но воркеров много. да и лень это такая штука…
как говориться правильный админ — ленивый админ, потому что он один раз все настроил, а дальше уже все автоматом :)
а у вас сколько продакшенов? мне просто лень идти на все воркеры делать одни и теже операции. тем более что ошибиться не мудрено, а капистрано очень помогает.
держим свежую СТАБИЛЬНУЮ версию руби. опять же в каждом релизе есть ошибки. и по части безопасности тоже.
а в чем проблема держать последнюю версию? прогнали спеки, проверили что ничего не поломалось и можно использовать.
я как раз пользую rvm во всю.
у нас не супер-сервера а простой Amazon EC2 middle.
дело то не в том что собирает или нет из сорцов. дело в том что когда мне надо обновить руби я просто пишу
rvm upgrade 1.9.2-p136 192-p180 и всё.
rvm мне и жемсеты перенесет, и пересоберет что надо в жемах. не надо париться. и симлинку на дефолтный обновит.всего одна команда против трех.
Кстати для полноге zero-downtime нужно делать так: after_fork do |server, worker|
begin
worker.user('deployer', 'deployer') if Process.euid == 0
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
old_pid = "#{server.config[:pid]}.oldbin"
if File.exists?(old_pid) && server.pid != old_pid
begin
# after this all request will be processed by new workers
Process.kill("WINCH", File.read(old_pid).to_i)
sleep 0.1
# send stop for the old master
Process.kill("QUIT", File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end
rescue => e
puts "[#{Process}]: #{e.message}\n"
puts "[#{Process}]: #{e.backtrace.join("\n")}"
end
end
то что вы используете thin это ваше право.
а вот то что вы собираете из сорцов — значит у вас очень много свободного времени. как вы обновляете руби? ручками? в наше то прогрессивное время…
в любом случае удачи вам
ммм… нями нями… из убунту делаем слакварь! правильно! хороший совет! потом после тех кто будет такое делать, другим будет легче получить больше бабла с клиента ;)
www.ruby-lang.org/en/news/2011/02/18/fileutils-is-vulnerable-to-symlink-race-attacks/ — читаем тут.
скорее всего 20 за 1 раз или 10 за 6.
есть teamcity с несколькими профилями сборки.
моно сделать еще один профиль с новым руби, благо тимсити поддерживает rvm.
и оно все автоматом прогонит еще и скажет где была ошибка
как говориться правильный админ — ленивый админ, потому что он один раз все настроил, а дальше уже все автоматом :)
а в чем проблема держать последнюю версию? прогнали спеки, проверили что ничего не поломалось и можно использовать.
у нас не супер-сервера а простой Amazon EC2 middle.
дело то не в том что собирает или нет из сорцов. дело в том что когда мне надо обновить руби я просто пишу
rvm upgrade 1.9.2-p136 192-p180 и всё.
rvm мне и жемсеты перенесет, и пересоберет что надо в жемах. не надо париться. и симлинку на дефолтный обновит.всего одна команда против трех.
сделать дефолтным другую версию руби не получиться — прав не хватит.
ну с капистрано не получиться nologin
after_fork do |server, worker|
begin
worker.user('deployer', 'deployer') if Process.euid == 0
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
old_pid = "#{server.config[:pid]}.oldbin"
if File.exists?(old_pid) && server.pid != old_pid
begin
# after this all request will be processed by new workers
Process.kill("WINCH", File.read(old_pid).to_i)
sleep 0.1
# send stop for the old master
Process.kill("QUIT", File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end
rescue => e
puts "[#{Process}]: #{e.message}\n"
puts "[#{Process}]: #{e.backtrace.join("\n")}"
end
end
а вот то что вы собираете из сорцов — значит у вас очень много свободного времени. как вы обновляете руби? ручками? в наше то прогрессивное время…
в любом случае удачи вам
before_exec do |server|
ENV["BUNDLE_GEMFILE"] = "#{rails_root}/Gemfile"
end
Если этой строчки не будет, то при обновлении Gemfile у вас после релоада уникорна не будет новых изменений бандла джемов.
у меня вот так — snapplr.com/gpr1