Я использую комбо Apache-Passenger и сценарий (см. Ниже), но я много читал о тестах, подталкивающих Node.JS к балансировщику нагрузки Nginx - и, по крайней мере, для предоставления API веб-сервисов, это может иметь смысл1001 *
Мой сценарий:
def build_a_new_oxenserver()
site = siteurl.gsub(/\./,"_")
system( "rake add_site['#{siteurl}','#{site}','#{id}']") if Rails.env.production?
default_tmpl = open(File.expand_path(Rails.root + "public/default_template.html")).read
tmpl = Template.create(:ox_id=>id, :name=>"first template", :content=>default_tmpl)
pg=Page.create( :ox_id=>id, :language_id=>1, :template_id=>tmpl.id, :title=>"Home", :menu_label=>"Zu Hause", :ancestry=>nil, :root=>true)
# add the Paragraph element to this ox's toolbox
self.elements << Element.find(1)
# add an Article, a Paragraph, and a Post
pe = PageElement.create( :element_id => Element.find(1) )
pe.elementable = Paragraph.create(:content=>"This is written *in bold* -")
pe.save
pg.page_elements << pe
end
Грабли add_site выполняют удаленную работу на производственном сервере - создают необходимые папки, файлы конфигурации и связанные сценарии для запуска нового «экземпляра».Таким образом, я могу расширять свои услуги и, приложив немного усилий, я также смогу расширить возможности балансировки нагрузки.
Обратите внимание, что это решение является «общим источником»'version
Сценарий рейка выглядит следующим образом:
#
# rake add_site["www.domain.tld", "www_domain_tld", 131]
desc "Task for adding new oxenserver site"
task :add_site, :domain, :site, :ox_id do |t, args|
service_path = /data/www/html/app_service
site_string = %{
<VirtualHost *:80>
ServerName #{args[:domain]}
DocumentRoot #{service_path}/sites/#{args[:site]}/public
PassengerAppRoot #{service_path}/sites/#{args[:site]}
SetEnv OX_ID #{args[:ox_id]}
<Directory #{service_path}/sites/#{args[:site]}/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
}
File.open("tmp/#{args[:site]}.conf", "w") do |f|
f.write site_string
end
site_start = %{
mv #{service_path}/current/tmp/#{args[:site]}.conf /data/apache/conf.d/#{args[:site]}.conf
service httpd restart
}
File.open("tmp/#{args[:site]}.sh", "w") do |f|
f.write site_start
end
#
sites_dir = "#{service_path}/sites/#{args[:site]}"
shared_sites_dir = "#{service_path}/shared/sites/#{args[:site]}"
shared_oxen_dir = "#{service_path}/shared/sites/oxen"
current = "#{service_path}/current"
# prepare system files/directories
system "mkdir #{sites_dir} #{shared_sites_dir} #{shared_sites_dir}/public"
system "cd #{sites_dir} && cp -rus #{current}/* ."
system "cd #{shared_sites_dir}/public && cp -r #{shared_oxen_dir}/public/* ."
system "cd #{shared_sites_dir} && mkdir log tmp && cd #{sites_dir} && rm -rf public log tmp && ln -s #{shared_sites_dir}/public public && ln -s #{shared_sites_dir}/log log && ln -s #{shared_sites_dir}/tmp tmp"
system "cd #{sites_dir} && touch tmp/restart.txt log/production.log"
system "mv tmp/#{args[:site]}.sh public/system/job_queue/#{args[:site]}.sh"
end