Erinevus lehekülje "Ruby on rails" redaktsioonide vahel

Allikas: Kuutõrvaja
(Paigaldamine)
 
(ei näidata 2 kasutaja 97 vahepealset redaktsiooni)
1. rida: 1. rida:
Apache22 ruby on rails and mongrel
+
[[Pilt:Bruce on rails.jpg|frame|right|Ruby on Rails]]
  
Süsteem toimib nii, et Apache suunab vhostide info mongrel serverile, mis siis railsi skripte esile manab.
+
===Sissejuhatus===
  
Installime vajalikud päkitsad
+
Ruby on Rails on veebiarenduse raamistik ehk ''framework'', mis kasutab programmeerimiskeelt Ruby. Kui Rails on alles noor raamistik (2004), siis Ruby on juba aastast 1993, mil Yukihiro Matsumoto sai Jaapanis tööle esimese "Hello World!"-i.
  
cd /usr/ports/apache22
+
Rails on mõeldud lihtsustama ning kiirendama andmebaasidega seotud veebilehtide loomist. Rails on kirjutatud Ruby keeles ja tegemist on vabavaralise projektiga.
make install with_proxy_modules=yes
 
  
cd /usr/ports/lang/ruby18
+
===Rails arenduskeskond===
make install && make clean
 
  
cd /usr/ports/devel/ruby-gems
+
Installime vajalikud päkitsad railsile
make install && make clean
 
  
gem install mongrel
+
Paigaldada on vaja
gem install rails
 
  
 +
* Mingi andmebaasi server näiteks MySQL, Postgresql
 +
* Ruby programeerimiskeele vahendid
 +
* rubygem-rails koos sltuvustega
  
Loome vajalikud skriptid
+
====Paigaldamine====
  
pane rcrails /etc/init.d vms kausta ja start_mongrel iga railsi script kausta. start_mongreli sees määra USER ja GROUP, kellena see server jooksma peaks.
+
RoR paigaldamiseks sobib öelda Debian operatsioonisüsteemis
  
Meil on kaks eraldi railsis loodud programmi, mis asuvad
+
# apt-get install rails
  
/home/rails/progeadmin/
+
Railsi gemist paigaldamiseks tuleb esiteks installida arvutiss ruby gems pakett ning seejärel vaadata mis versioon railsist on hetkel kõige viimane. Selleks tuleb anda käsk
/home/rails/veebiadmin/
 
  
/usr/local/etc/rails.conf või muusse faili (muuda vastavalt rcrails skripti) kirjuta näiteks:
+
# gem search rails --remote
  
RAILS_SERVERS="
+
Mis tekitab nimekirja railsi aktiivsetest versioonidest mida annab paigadada.
/home/rails/progeadmin/
+
Viimane versioon selle teksti kirjutamise hetkel on 2.0.2 nii ,et installime selle andes käsu
/home/rails/veebiadmin/
 
"
 
  
Ehitame ruudu alla näiteks skripti, mis stardib mongreleid nimega rcrails
+
# gem install rails --version 2.0.2
  
  #!/usr/local/bin/bash
+
'''Paigaldamine Gentoos'''
  #
+
 
# This is proxy skript to start-stop mongrel_rails servers
+
Emergeda tuleb pakett www-apache/passenger ning jälgida
  # This script can be placed in /etc/init.d or other rc startup directory
+
edasise seadistuse osas selle paketi poolt jagatud juhiseid.
  # and it will pass its first argument to each rails start script.  
+
 
 +
====Rakenduse ehk projekti tekitamine====
 +
 
 +
RoR rakenduse tekitamiseks tuleb
 +
 
 +
* tekitada rakendusele vastav kataloogistruktuur
 +
 
 +
Postgresql puhul
 +
 
 +
$ rails -D postgresql contactlist
 +
 
 +
* tekitada andmebaas, nt PostgreSQL
 +
 
 +
create table contacts (
 +
id serial not null,             
 +
first_name varchar(100)  not null,
 +
last_name  varchar(100)  not null,                   
 +
address    varchar(255)  not null,                             
 +
city      varchar(100)  not null,                                     
 +
state      varchar(2)    not null,                                               
 +
country    varchar(100)  not null,
 +
phone      varchar(15)  not  null,
 +
email      varchar(100) ,
 +
CONSTRAINT pk_id PRIMARY KEY (id)
 +
);
 +
 
 +
ning kohendada baasi ligipääs seadistusfailis
 +
 
 +
config/database.yml
 +
 
 +
Nt selliselt
 +
 
 +
development:
 +
  adapter: postgresql
 +
  encoding: unicode 
 +
  database: contactlist_development
 +
  username: contactlist
 +
  password: parool
 +
  host: 192.168.1.247
 +
  port: 5432
 +
  ...
 +
 
 +
Mysql puhul
 +
 
 +
rails -d mysql test
 +
 
 +
===Sissejuhatus mudelitesse ja kontrolleritesse===
 +
 
 +
Railsis on mudelid (model) ja controllerid (controller)
 +
See kõik asub siis stiilis aadress/kontroller. Näiteks www.nimi.ee kuhu
 +
lõime hetk tagasi kontrolleri nimega katsetus.
 +
Kohe peale loomist oli www.nimi.ee/katsetus kättesaadav. Models on kasutusel kui sql andmete hoidjad, meil on kasutuses mudel nimega test. Raisi controlleri failis defineeritakse asju, mida sinna www.nimi.ee/test/? kohta panna äsjaloodud kontrolleril on seal näiteks index, aee on avaleht.
 +
Lisame näiteks indexile väikese teksti:
 +
 
 +
====Mudeli tekitamine====
 +
 
 +
  $ ruby script/generate model Contact
 +
 
 +
* Veenduda, et mudelit saab Rails konsoolilt kasutada
 +
 
 +
  $ ruby script/console
 +
Loading development environment (Rails 2.1.0)
 +
>> my_contact = Contact.new
 +
  => #<Contact id: nil, first_name: nil, last_name: nil, \
 +
  address: nil, city: nil, state: nil, country: nil, phone: nil, email: nil>
 +
 
 +
>> my_contact.first_name = 'Priit'
 +
=> "Priit"
 +
>> my_contact.last_name = 'Kask'
 +
=> "Kask"
 +
>> my_contact.address = 'Loomaaia tee 1'
 +
=> "Loomaaia tee 1"
 +
>> my_contact.city = 'Tartu'           
 +
=> "Tartu"
 +
>> my_contact.state = 'TR'
 +
=> "Tartu"
 +
>> my_contact.country = 'Eesti'
 +
=> "Eesti"
 +
>> my_contact.phone = '54331' 
 +
=> "54331"
 +
>> my_contact.email = 'priit@loomaaed.tartu.ee'
 +
=> "priit@loomaaed.tartu.ee"
 
   
 
   
  conf="/usr/local/etc/mongrel.conf"
+
  >> my_contact.save
 +
=> true
 
   
 
   
  if [ -f $conf ]
+
  >> result = Contact.find(:first)
  then
+
  => #<Contact id: 3, first_name: "Priit", last_name: "Kask", address: "Loomaaia tee 1", \
   source $conf
+
   city: "Tartu", state: "TR", country: "Eesti", phone: "54331", email: "priit@loomaaed.tartu.ee">
fi
 
 
   
 
   
  # function to do actual calling
+
  >> puts result.first_name
  start_stop_rails(){
+
  Priit
  echo ""
+
=> nil
  echo "Rails directory: $1"
+
 
  cd $1
+
Lisaks annab kinnitust õnnestumisest, kui PostgreSQL andmebaasi vastavasse tabelisse on toimunud sissekanne.
  ./script/start_mongrel $2
+
 
  }
+
===Kontrolleri tekitamine===
 +
 
 +
Seejärel anname käsu mis loob uue kontrolleri.
 +
 
 +
ruby script/generate controller katsetus
 +
 
 +
avame faili test/app/controllers/katsetus_controller
 +
kus asub class KatsetusControllerning tekitame sinna järgneva sisu
 +
 
 +
  class KatsetusController < ApplicationController
 
   
 
   
# set CMD to first argument
+
  def index
CMD=$1
+
    render :text => "tekst index lehele"
 +
  end
 
   
 
   
  for i in $RAILS_SERVERS
+
  end
do
 
  start_stop_rails $i $CMD
 
done
 
  
Loome skripti start_mongrel ja kopeerime kausta /home/rails/progeadmin/
+
ja liikudes urlile http://www.nimi.ee:8000/katsetus
  
#!/usr/local/bin/bash
+
peaksime nägema kirja '''tekst index lehele'''
 
USER="root"
 
GROUP="wheel"
 
 
case $1 in
 
  start)
 
    /usr/local/bin/mongrel_rails start -d --user $USER --group $GROUP -p 8001 -a 127.0.0.1 -P rails-8001.pid
 
    /usr/local/bin/mongrel_rails start -d --user $USER --group $GROUP -p 8002 -a 127.0.0.1 -P rails-8002.pid
 
    /usr/local/bin/mongrel_rails start -d --user $USER --group $GROUP -p 8003 -a 127.0.0.1 -P rails-8003.pid
 
    ;;
 
  restart)
 
    /usr/local/bin/mongrel_rails restart -P rails-8001.pid
 
    /usr/local/bin/mongrel_rails restart -P rails-8002.pid
 
    /usr/local/bin/mongrel_rails restart -P rails-8003.pid
 
  ;;
 
  stop)
 
    /usr/local/bin/mongrel_rails stop -P rails-8001.pid
 
    /usr/local/bin/mongrel_rails stop -P rails-8002.pid
 
    /usr/local/bin/mongrel_rails stop -P rails-8003.pid
 
  ;;
 
  *)
 
    cat <<EOF
 
 
USAGE: $0 <start|stop|restart>
 
 
Mongrel places it's pid files in the RAILS_ROOT directory, which must be writable by the calling user.
 
 
EOF
 
esac
 
  
Teeme teise skripti start_mongrel ning kopeerime /home/rails/veebiadmin/
+
====Rakenduse veebiliidese startimine====
  
#!/usr/local/bin/bash
+
seejärel stardime arenduseks vajaliku webrick serveri
 
USER="root"
 
GROUP="wheel"
 
 
 
 
case $1 in
 
  start)
 
    /usr/local/bin/mongrel_rails start -d --user $USER --group $GROUP -p 8101 -a 127.0.0.1 -P rails-8101.pid
 
    /usr/local/bin/mongrel_rails start -d --user $USER --group $GROUP -p 8102 -a 127.0.0.1 -P rails-8102.pid
 
    /usr/local/bin/mongrel_rails start -d --user $USER --group $GROUP -p 8103 -a 127.0.0.1 -P rails-8103.pid
 
    ;;
 
  restart)
 
    /usr/local/bin/mongrel_rails restart -P rails-8101.pid
 
    /usr/local/bin/mongrel_rails restart -P rails-8102.pid
 
    /usr/local/bin/mongrel_rails restart -P rails-8103.pid
 
  ;;
 
  stop)
 
    /usr/local/bin/mongrel_rails stop -P rails-8101.pid
 
    /usr/local/bin/mongrel_rails stop -P rails-8102.pid
 
    /usr/local/bin/mongrel_rails stop -P rails-8103.pid
 
  ;;
 
  *)
 
    cat <<EOF
 
 
USAGE: $0 <start|stop|restart>
 
 
Mongrel places it's pid files in the RAILS_ROOT directory, which must be writable by the calling user.
 
 
EOF
 
esac
 
  
httpd.conf
+
# cd contactlist
 +
# script/server -d -p 3000
 +
=> Booting WEBrick...
 +
=> Rails application started on http://0.0.0.0:3000
 +
[2008-01-08 18:27:50] INFO  WEBrick 1.3.1
 +
[2008-01-08 18:27:50] INFO  ruby 1.8.6 (2007-09-24) [i386-freebsd7]
  
Kontrollime, et read oleksid
+
võti -p 3000 stardib veebiserveri pordile 3000
 +
ning -d paneb tööle taustal, kasutades debumiseks on soovitatav see ärajätta
  
LoadModule proxy_module libexec/apache22/mod_proxy.so
+
Nb! kui muudate database.yml faili tuleb veebiserverit taaskäivitada
LoadModule proxy_connect_module libexec/apache22/mod_proxy_connect.so
 
LoadModule proxy_ftp_module libexec/apache22/mod_proxy_ftp.so
 
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so
 
LoadModule proxy_ajp_module libexec/apache22/mod_proxy_ajp.so
 
LoadModule proxy_balancer_module libexec/apache22/mod_proxy_balancer.so
 
  
Nüüd loome mõlemale progele nende vhostid
+
nüüd peaksime enda projekti nägema aadressil http://www.nimi.ee:3000
  
<VirtualHost 193.40.0.10:80>
+
[[Pilt:Railsiveb.jpg]]
  ServerName progeadmin.katse.ee
 
  DocumentRoot /home/rails/progeadmin/
 
 
  <Directory "/home/rails/progeadmin/">
 
    Options FollowSymLinks
 
    AllowOverride None
 
    Order allow,deny
 
    Allow from all
 
  </Directory>
 
 
  RewriteEngine On
 
 
 
  # Redirect all non-static requests to cluster
 
  #RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
 
  RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]
 
 
</VirtualHost>
 
  
<VirtualHost 193.40.0.10:80>
+
===Railsi logid===
  ServerName veebiadmin
 
  DocumentRoot /home/rails/veebiadmin/
 
 
  <Directory "/home/rails/veebiadmin/">
 
    Options FollowSymLinks
 
    AllowOverride None
 
    Order allow,deny
 
    Allow from all
 
  </Directory>
 
 
 
  RewriteEngine On
 
 
  # Rewrite to trailing slash
 
  RewriteRule ^/admin$ /admin/ [R,L]
 
 
  # test if this is /admin request
 
  RewriteCond %{REQUEST_URI} ^/admin(/.*)
 
  # strip off /admin and put result in ENV
 
  RewriteRule ^/admin(.*) /admin$1 [E=AdminReq:$1]
 
 
  RewriteCond /home/rails/admin/public/%{ENV:AdminReq} -f
 
  # serve static files
 
  RewriteRule ^/admin/(.*) /home/rails/admin/public/$1 [L]
 
  # If request is not static, proxy to rails
 
  RewriteRule ^/(admin/.*)$ balancer://mongrel_cluster2/$1 [P,QSA,L]
 
 
 
</VirtualHost>
 
  
Ehitame proxyd
+
Logid võivad railsil kasvada päris suureks seetõttu oleks mõistlik need roteerima panna
  
<Proxy balancer://mongrel_cluster2>
+
näiteks sobiks logrotate jaoks selline blokk
    BalancerMember http://127.0.0.1:8001
 
    BalancerMember http://127.0.0.1:8002
 
    BalancerMember http://127.0.0.1:8003
 
</Proxy>
 
  
  <Proxy balancer://mongrel_cluster>
+
  /www/projekt/rails/log/production.log {
    BalancerMember http://127.0.0.1:8101
+
    daily
     BalancerMember http://127.0.0.1:8102
+
    rotate 14
    BalancerMember http://127.0.0.1:8103
+
    size 5M
</Proxy>
+
    compress
 +
    create 640
 +
    missingok
 +
    # vaja ka teha railsile restart, kui kasutuses moodulina siis näiteks selliselt
 +
     touch /www/projekt/rails/tmp/restart.txt
 +
  }
  
ja balaceri
+
ja liikudes urlile http://www.nimi.ee:8000/katsetus
  
Listen 8000
+
peaksime nägema kirja "Hello world"
<VirtualHost 193.40.0.10:8000>
 
  <Location />
 
    SetHandler balancer-manager
 
    Deny from all
 
    Allow from localhost
 
  </Location>
 
</VirtualHost>
 
  
Lingid
+
===Lingid===
  
 +
* [[Ruby]]
  
http://blog.innerewut.de/articles/2006/04/21/scaling-rails-with-apache-2-2-mod_proxy_balancer-and-mongrel
+
* http://www.onlamp.com/pub/a/onlamp/2005/03/03/rails.html

Viimane redaktsioon: 10. november 2010, kell 17:50

Ruby on Rails

Sissejuhatus

Ruby on Rails on veebiarenduse raamistik ehk framework, mis kasutab programmeerimiskeelt Ruby. Kui Rails on alles noor raamistik (2004), siis Ruby on juba aastast 1993, mil Yukihiro Matsumoto sai Jaapanis tööle esimese "Hello World!"-i.

Rails on mõeldud lihtsustama ning kiirendama andmebaasidega seotud veebilehtide loomist. Rails on kirjutatud Ruby keeles ja tegemist on vabavaralise projektiga.

Rails arenduskeskond

Installime vajalikud päkitsad railsile

Paigaldada on vaja

  • Mingi andmebaasi server näiteks MySQL, Postgresql
  • Ruby programeerimiskeele vahendid
  • rubygem-rails koos sltuvustega

Paigaldamine

RoR paigaldamiseks sobib öelda Debian operatsioonisüsteemis

# apt-get install rails

Railsi gemist paigaldamiseks tuleb esiteks installida arvutiss ruby gems pakett ning seejärel vaadata mis versioon railsist on hetkel kõige viimane. Selleks tuleb anda käsk

# gem search rails --remote

Mis tekitab nimekirja railsi aktiivsetest versioonidest mida annab paigadada. Viimane versioon selle teksti kirjutamise hetkel on 2.0.2 nii ,et installime selle andes käsu

# gem install rails --version 2.0.2

Paigaldamine Gentoos

Emergeda tuleb pakett www-apache/passenger ning jälgida edasise seadistuse osas selle paketi poolt jagatud juhiseid.

Rakenduse ehk projekti tekitamine

RoR rakenduse tekitamiseks tuleb

  • tekitada rakendusele vastav kataloogistruktuur

Postgresql puhul

$ rails -D postgresql contactlist
  • tekitada andmebaas, nt PostgreSQL
create table contacts (
id serial not null,              
first_name varchar(100)  not null,
last_name  varchar(100)  not null,                     
address    varchar(255)  not null,                              
city       varchar(100)  not null,                                       
state      varchar(2)    not null,                                                
country    varchar(100)  not null,
phone      varchar(15)   not  null,
email      varchar(100) ,
CONSTRAINT pk_id PRIMARY KEY (id)
);

ning kohendada baasi ligipääs seadistusfailis

config/database.yml

Nt selliselt

development:
  adapter: postgresql
  encoding: unicode  
  database: contactlist_development
  username: contactlist
  password: parool
  host: 192.168.1.247 
  port: 5432
...

Mysql puhul

rails -d mysql test

Sissejuhatus mudelitesse ja kontrolleritesse

Railsis on mudelid (model) ja controllerid (controller) See kõik asub siis stiilis aadress/kontroller. Näiteks www.nimi.ee kuhu lõime hetk tagasi kontrolleri nimega katsetus. Kohe peale loomist oli www.nimi.ee/katsetus kättesaadav. Models on kasutusel kui sql andmete hoidjad, meil on kasutuses mudel nimega test. Raisi controlleri failis defineeritakse asju, mida sinna www.nimi.ee/test/? kohta panna äsjaloodud kontrolleril on seal näiteks index, aee on avaleht. Lisame näiteks indexile väikese teksti:

Mudeli tekitamine

$ ruby script/generate model Contact
  • Veenduda, et mudelit saab Rails konsoolilt kasutada
$ ruby script/console
Loading development environment (Rails 2.1.0)
>> my_contact = Contact.new
=> #<Contact id: nil, first_name: nil, last_name: nil, \
  address: nil, city: nil, state: nil, country: nil, phone: nil, email: nil>
>> my_contact.first_name = 'Priit'
=> "Priit"
>> my_contact.last_name = 'Kask'
=> "Kask"
>> my_contact.address = 'Loomaaia tee 1'
=> "Loomaaia tee 1"
>> my_contact.city = 'Tartu'            
=> "Tartu"
>> my_contact.state = 'TR'
=> "Tartu"
>> my_contact.country = 'Eesti'
=> "Eesti"
>> my_contact.phone = '54331'  
=> "54331"
>> my_contact.email = 'priit@loomaaed.tartu.ee'
=> "priit@loomaaed.tartu.ee"

>> my_contact.save
=> true

>> result = Contact.find(:first)
=> #<Contact id: 3, first_name: "Priit", last_name: "Kask", address: "Loomaaia tee 1", \
  city: "Tartu", state: "TR", country: "Eesti", phone: "54331", email: "priit@loomaaed.tartu.ee">

>> puts result.first_name
Priit
=> nil

Lisaks annab kinnitust õnnestumisest, kui PostgreSQL andmebaasi vastavasse tabelisse on toimunud sissekanne.

Kontrolleri tekitamine

Seejärel anname käsu mis loob uue kontrolleri.

ruby script/generate controller katsetus 

avame faili test/app/controllers/katsetus_controller kus asub class KatsetusControllerning tekitame sinna järgneva sisu

class KatsetusController < ApplicationController 

 def index
   render :text => "tekst index lehele"
 end

end

ja liikudes urlile http://www.nimi.ee:8000/katsetus

peaksime nägema kirja tekst index lehele

Rakenduse veebiliidese startimine

seejärel stardime arenduseks vajaliku webrick serveri

# cd contactlist
# script/server -d -p 3000
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
[2008-01-08 18:27:50] INFO  WEBrick 1.3.1
[2008-01-08 18:27:50] INFO  ruby 1.8.6 (2007-09-24) [i386-freebsd7]

võti -p 3000 stardib veebiserveri pordile 3000 ning -d paneb tööle taustal, kasutades debumiseks on soovitatav see ärajätta

Nb! kui muudate database.yml faili tuleb veebiserverit taaskäivitada

nüüd peaksime enda projekti nägema aadressil http://www.nimi.ee:3000

Railsiveb.jpg

Railsi logid

Logid võivad railsil kasvada päris suureks seetõttu oleks mõistlik need roteerima panna

näiteks sobiks logrotate jaoks selline blokk

/www/projekt/rails/log/production.log {
   daily
   rotate 14
   size 5M
   compress
   create 640
   missingok
   # vaja ka teha railsile restart, kui kasutuses moodulina siis näiteks selliselt
   touch /www/projekt/rails/tmp/restart.txt
 }

ja liikudes urlile http://www.nimi.ee:8000/katsetus

peaksime nägema kirja "Hello world"

Lingid