Simple Sinatra application
JavaScript Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
config
log
public
views
.gitignore
Capfile
Capfile.mongrel
Capfile.passenger
Capfile.thin
README.markdown
TODO
config.ru
education
education.rb

README.markdown

Sinatra Fortune ▶ Education

Prosta aplikacja wypisująca losowo wybrany cytat z pliku education.json.

Aplikację uruchamiamy tak jak każdą aplikację Sinatry:

ruby education.rb -p 4567 -s localhost

Jeśli aplikacja uruchomi się bez żadnych problemów, to będzie on dostępna w przeglądarce pod url:

http://localhost:4567

Deployment na serwer z Apachem z modułem Passenger

Tworzymy katalog config i wykonujemy polecenie:

capify .

Zostaną utworzone dwa nowe pliki: Capfile oraz config/deploy.rb.

Do pliku Capfile dopisujemy:

namespace :deploy do
  desc "Start the Passenger process on the app server."
  task :start, :roles => :app  do
    run "/bin/touch #{current_release}/tmp/restart.txt"  
  end

  desc "Stop the Passenger process on the app server."
  task :stop, :roles => :app do
    # do nothing
  end

  desc "Restart the Passenger process on the app server."
  task :restart, :roles => :app do
    run "/bin/touch #{current_path}/tmp/restart.txt"
  end
end

A zawartość config/deploy.rb wymieniamy na:

set :application, "fortune"
set :repository, "git@github.com:wbzyl/sinatra_fortune.git"

set :scm, :git
set :branch, "master"  
set :deploy_via, :export  
set :use_sudo, false

set :deploy_to,   "/srv/app/sinatra/#{application}"

set :keep_releases, "4"  # cap deploy:cleanup  

role :app, "localhost"
role :web, "localhost"
role :db,  "localhost", :primary => true

set :user, "wbzyl"

Deploying to a sub URI

DNS: dopisujemy do pliku /etc/hosts:

127.0.0.1  localhost.localdomain  localhost  edu.local

Teraz dodajemy nowy plik konfiguracyjny dla Apacha /etc/httpd/conf.d/mod_rails_vhosts.conf w którym dopisujemy do już działającej aplikacji TI aplikację Sinatra Fortune:

<VirtualHost *:80>
    ServerName edu.local
    DocumentRoot /srv/www/servers
    RackBaseURI /ti
    RackBaseURI /sinatra/fortune
</VirtualHost>

Jeśli poprawnie wklepaliśmy cały kod, to poniższe polecenia powinny wykonać się bez błędów:

cap deploy:setup
cap deploy:check
cap deploy:update

Teraz najważniejszy krok:

ln -s /srv/app/sinatra/fortune/current/public /srv/www/servers/sinatra/fortune

I teraz już z górki, restartujemy demona httpd:

sudo /etc/init.d htppd restart

i aplikacje powinny być dostępne pod takimi URL:

http://edu.local/ti/
http://edu.local/sinatra/fortune/

Deployment Nirvana

Po zmianach w kodzie aplikacji, wykonujemy zazwyczaj kilka z poniższych poleceń:

cap deploy:pending:diff
git commit -m ".. jakiś wpis do log .."
git push
cap deploy:update
cap deploy:restart

gdzie ostatnie dwa polecenia możemy wymienić na jedno:

cap deploy

Deployment na serwer z Thin

Zobacz Capfile.thin:

namespace :deploy do
  desc <<-DESC
  Start Thin processes on the app server.
  DESC
  task :start, :roles => :app do
    run "/usr/bin/thin -s 1 -C #{current_path}/config/thin_config.yaml start"
  end

  desc <<-DESC
  Stop the Thin process on the app server. 
  DESC
  task :stop, :roles => :app do
    run "/usr/bin/thin -s 1 -C #{current_path}/config/thin_config.yaml stop"
  end

  desc <<-DESC
  Restart the Thin process on the app server. 
  DESC
  task :restart, :roles => :app do
    run "/usr/bin/thin -s 1 -C #{current_path}/config/thin_config.yaml restart"
  end
end

oraz plik thin_config.yaml:

---
environment: production
chdir: /srv/app/sinatra/fortune/current
address: 127.0.0.1
user: wbzyl
group: wbzyl
port: 4000
pid: /srv/app/sinatra/fortune/shared/pid/thin.pid
log: /srv/app/sinatra/fortune/shared/log/thin.log
rackup: /srv/app/sinatra/fortune/current/config.ru
max_conns: 1024
timeout: 30
max_persistent_conns: 512
daemonize: true

Pierwsze wdarożenie zaczynamy od wykonania poleceń:

cap -f Capfile.thin deploy:setup
cap -f Capfile.thin deploy:check
cap -f Capfile.thin deploy:update
cap -f Capfile.thin deploy:[start |stop |restart ]

Po wdrożeniu aplikacja powinna być dostępna pod URL:

http://localhost:4000