Ruby on rails: erinevus redaktsioonide vahel

Allikas: Kuutõrvaja
Mine navigeerimisribaleMine otsikasti
Jj (arutelu | kaastöö)
Jj (arutelu | kaastöö)
 
(ei näidata 2 kasutaja 77 vahepealset redaktsiooni)
1. rida: 1. rida:
[[Pilt:Bruce on rails.jpg|frame|right|Ruby on Rails]]
===Sissejuhatus===
===Sissejuhatus===


Ruby on Rails on veebiarenduse raamistik, mis kasutab programmeerimiskeelt Ruby. Kui Rails on alles paariaastane noor raamistik, siis ruby on juba aastast 1993, mil Jaapanis Yukihiro Matsumoto sai tööle esimese "Hello World!".
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===
===Rails arenduskeskond===
7. rida: 11. rida:
Installime vajalikud päkitsad railsile
Installime vajalikud päkitsad railsile


Paigaldada on vaja


'''install FreeBSDs'''
* Mingi andmebaasi server näiteks MySQL, Postgresql
* Ruby programeerimiskeele vahendid
* rubygem-rails koos sltuvustega


Esimesena mysql server
====Paigaldamine====


cd /usr/ports/databases/mysql50-server
RoR paigaldamiseks sobib öelda Debian operatsioonisüsteemis
make install clean


Seejärel ruby
# apt-get install rails


cd /usr/ports/lang/ruby18
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
make install clean
Portupgrade install


  pkg_add -r portupgrade
  # gem search rails --remote


Ning seejärel võime railsi ennast installima asuda
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


  portinstall -PR rubygem-rails
  # gem install rails --version 2.0.2


Viimane käsk installib railsi koos kõigi sõltuvustega
'''Paigaldamine Gentoos'''
võti P käseb kasutada binaarseid installereid kui võimalik ja R
upgradeb juba installitud sõltuvusi. Samuti küsitakse
kasutajalt mingihetk mis tüüpi andmebaasi ta soovib kasutada.


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


Uue projekti loome käsuga
====Rakenduse ehk projekti tekitamine====


rails ideenimi
RoR rakenduse tekitamiseks tuleb


rails 2.0 puhul ,et vältida mysqli tuleb kirjutada
* tekitada rakendusele vastav kataloogistruktuur


rails -d mysql test
Postgresql puhul


Genereerib kausta test
$ rails -D postgresql contactlist


seejärel stardime arenduseks vajaliku webrick serveri
* tekitada andmebaas, nt PostgreSQL


  cd test
  create table contacts (
  script/server -d -p 3000
  id serial not null,             
  => Booting WEBrick...
  first_name varchar(100)  not null,
  => Rails application started on http://0.0.0.0:3000
last_name  varchar(100)  not null,                   
  [2008-01-08 18:27:50] INFO WEBrick 1.3.1
  address    varchar(255)  not null,                             
  [2008-01-08 18:27:50] INFO ruby 1.8.6 (2007-09-24) [i386-freebsd7]
  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)
);


võti p 3000 stardib veebiserveri pordile 3000
ning kohendada baasi ligipääs seadistusfailis


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


nüüd peaksime enda projekti nägema aadressil http://localhost:3000
Nt selliselt


Railsis on mudelid (model) ja controllerid (controller )
development:
See kõik asub siis stiilis aadress/kontroller. Näiteks www.domeen.ee ja
  adapter: postgresql
loome sinna kontrolleri, mis on siis nimega test
  encoding: unicode 
seega on kohe www.domeen.ee/test kättesaadav. Models on kasutusel kui sql andmete hoidjad
  database: contactlist_development
controlleri failis defineeritakse asju, mida sinna www.domeen.ee/test/? kohta panna
  username: contactlist
äsjaloodud kontrolleril on seal näiteks index see on avaleht.
  password: parool
Index peab olema defineeritud ka controlleri faili sees
  host: 192.168.1.247
muidu ei saa ta midagi kuvada seepärast näiteks lisame sellise:
  port: 5432
...


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


===Rails ja Apache mitme projektiga server===
rails -d mysql test


Süsteem toimib nii, et Apache suunab vhostide info mongrel serverile, mis siis railsi skripte esile manab.
===Sissejuhatus mudelitesse ja kontrolleritesse===


cd /usr/ports/apache22
Railsis on mudelid (model) ja controllerid (controller)
make install with_proxy_modules=yes
See kõik asub siis stiilis aadress/kontroller. Näiteks www.nimi.ee kuhu
gem install mongrel
lõime hetk tagasi kontrolleri nimega katsetus.
gem install mongrel-cluster
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====


Loome vajalikud skriptid
$ ruby script/generate model Contact


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.
* Veenduda, et mudelit saab Rails konsoolilt kasutada


Meil on kaks eraldi railsis loodud programmi, mis asuvad
$ 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>


  /home/rails/progeadmin/
  >> my_contact.first_name = 'Priit'
  /home/rails/veebiadmin/
  => "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


/usr/local/etc/rails.conf või muusse faili (muuda vastavalt rcrails skripti) kirjuta näiteks:
Lisaks annab kinnitust õnnestumisest, kui PostgreSQL andmebaasi vastavasse tabelisse on toimunud sissekanne.


RAILS_SERVERS="
===Kontrolleri tekitamine===
/home/rails/progeadmin/
/home/rails/veebiadmin/


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


Mongrel Cluster seadistus
class KatsetusController < ApplicationController
  def index
    render :text => "tekst index lehele"
  end
end


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


mongrel_rails cluster::configure -e production \
peaksime nägema kirja '''tekst index lehele'''
-p 8000 -N 3 -c /var/www/apps/testapp -a 127.0.0.1 \
--user mongrel --group mongrel


mongrel_rails cluster::configure -e production \
====Rakenduse veebiliidese startimine====
-p 8100 -N 3 -c /var/www/apps/testapp -a 127.0.0.1 \
--user mongrel --group mongrel


See käsk kirjutab konfiguratsiooni faili config/mongrel_cluster.yml.
seejärel stardime arenduseks vajaliku webrick serveri


  cat home/progeadmin/rails/config/mongrel_cluster.yml
  # 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]


user: programm
võti -p 3000 stardib veebiserveri pordile 3000
cwd: /home/progeadmin/rails/
ning -d paneb tööle taustal, kasutades debumiseks on soovitatav see ärajätta
port: "8000"
environment: production
group: konkurss
address: 127.0.0.1
pid_file: log/mongrel.pid
servers: 3


Nende käskude peale käivituvad kummagi railsi kohta kolm mongrel protsessi
Nb! kui muudate database.yml faili tuleb veebiserverit taaskäivitada
Esimesel portidele 8001 8002 8003 ja teisel 8101 8102 8103


Mongrel clustri startimiseks tuleb anda käsk
nüüd peaksime enda projekti nägema aadressil http://www.nimi.ee:3000


mongrel_rails cluster::start
[[Pilt:Railsiveb.jpg]]
 
 
 
httpd.conf
 
Kontrollime, et read oleksid
 
LoadModule proxy_module libexec/apache22/mod_proxy.so
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
 
<VirtualHost 193.40.0.10:80>
  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>
  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
===Railsi logid===


<Proxy balancer://mongrel_cluster2>
Logid võivad railsil kasvada päris suureks seetõttu oleks mõistlik need roteerima panna
    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>
näiteks sobiks logrotate jaoks selline blokk
    BalancerMember http://127.0.0.1:8101
    BalancerMember http://127.0.0.1:8102
    BalancerMember http://127.0.0.1:8103
</Proxy>


ja balaceri
/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
  }


Listen 8000
ja liikudes urlile http://www.nimi.ee:8000/katsetus
<VirtualHost 193.40.0.10:8000>
  <Location />
    SetHandler balancer-manager
    Deny from all
    Allow from localhost
  </Location>
</VirtualHost>


peaksime nägema kirja "Hello world"


===Lingid===
===Lingid===


http://www.rubyonrails.org/
* [[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 14: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

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