Erinevus lehekülje "Ruby on rails" redaktsioonide vahel

Allikas: Kuutõrvaja
(Paigaldamine)
 
(ei näidata 2 kasutaja 35 vahepealset redaktsiooni)
4. rida: 4. rida:
  
 
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.
 
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.
 
Ruby't saab proovida ka otse browseris http://tryruby.hobix.com/
 
  
 
Rails on mõeldud lihtsustama ning kiirendama andmebaasidega seotud veebilehtide loomist. Rails on kirjutatud Ruby keeles ja tegemist on vabavaralise projektiga.
 
Rails on mõeldud lihtsustama ning kiirendama andmebaasidega seotud veebilehtide loomist. Rails on kirjutatud Ruby keeles ja tegemist on vabavaralise projektiga.
 
Edasine tekst on kirjutatud FreeBSDd silmas pidades, kuid peaks olema piisavalt üldine ,et kasutada kõigil Linux/UNIX süsteemidel.
 
  
 
===Rails arenduskeskond===
 
===Rails arenduskeskond===
17. rida: 13. rida:
 
Paigaldada on vaja  
 
Paigaldada on vaja  
  
* Mysql server
+
* Mingi andmebaasi server näiteks MySQL, Postgresql
* ruby18
+
* Ruby programeerimiskeele vahendid
* rubygem-rails koos s2ltuvustega
+
* rubygem-rails koos sltuvustega
  
'''install FreeBSDs'''
+
====Paigaldamine====
  
Esimesena mysql server
+
RoR paigaldamiseks sobib öelda Debian operatsioonisüsteemis
  
  cd /usr/ports/databases/mysql50-server
+
  # apt-get install rails
make install clean
 
  
Seejärel ruby
+
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
  
  cd /usr/ports/lang/ruby18
+
  # gem search rails --remote
make install clean
 
Ning seejärel võime railsi ennast installima asuda
 
  
ning rails
+
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
  
  cd /usr/ports/www/rubygem-rails
+
  # gem install rails --version 2.0.2
make install clean
 
  
Saab kasutada ka lihtsalt
+
'''Paigaldamine Gentoos'''
  
gem install rails
+
Emergeda tuleb pakett www-apache/passenger ning jälgida
 +
edasise seadistuse osas selle paketi poolt jagatud juhiseid.
  
'''Uue projekti start'''
+
====Rakenduse ehk projekti tekitamine====
  
Uue projekti loome käsuga
+
RoR rakenduse tekitamiseks tuleb
  
rails ideenimi
+
* tekitada rakendusele vastav kataloogistruktuur
  
rails 2.0 puhul ,et vältida mysqli tuleb kirjutada
+
Postgresql puhul
  
  rails -d mysql test
+
  $ rails -D postgresql contactlist
  
Genereerib kausta test
+
* tekitada andmebaas, nt PostgreSQL
  
seejärel stardime arenduseks vajaliku webrick serveri
+
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)
 +
);
  
cd test
+
ning kohendada baasi ligipääs seadistusfailis
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
+
config/database.yml
  
Nb! kui muudate database.yml faili tuleb veebiserverit taaskäivitada
+
Nt selliselt
  
nüüd peaksime enda projekti nägema aadressil http://www.nimi.ee:3000
+
development:
 +
  adapter: postgresql
 +
  encoding: unicode 
 +
  database: contactlist_development
 +
  username: contactlist
 +
  password: parool
 +
  host: 192.168.1.247
 +
  port: 5432
 +
...
  
[[Pilt:Railsiveb.jpg]]
+
Mysql puhul
  
Seejärel anname käsu mis loob uue kontrolleri.
+
rails -d mysql test
  
ruby script/generate controller katsetus
+
===Sissejuhatus mudelitesse ja kontrolleritesse===
  
Railsis on mudelid (model) ja controllerid (controller )
+
Railsis on mudelid (model) ja controllerid (controller)
 
See kõik asub siis stiilis aadress/kontroller. Näiteks www.nimi.ee kuhu
 
See kõik asub siis stiilis aadress/kontroller. Näiteks www.nimi.ee kuhu
 
lõime hetk tagasi kontrolleri nimega katsetus.
 
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.
 
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:  
+
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  
 
avame faili test/app/controllers/katsetus_controller  
97. rida: 153. rida:
 
peaksime nägema kirja '''tekst index lehele'''
 
peaksime nägema kirja '''tekst index lehele'''
  
Edasi võib lugeda juba õpetusi stiilis
+
====Rakenduse veebiliidese startimine====
  
http://www.onlamp.com/pub/a/onlamp/2005/03/03/rails.html
+
seejärel stardime arenduseks vajaliku webrick serveri
  
===Rails ja Apache mitme projektiga server===
+
# 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]
  
Süsteem toimib nii, et Apache suunab vhostide info mongrel serverile, mis siis railsi skripte esile manab.
+
võti -p 3000 stardib veebiserveri pordile 3000
 +
ning -d paneb tööle taustal, kasutades debumiseks on soovitatav see ärajätta
  
Apache tuleb kompileerida koos proxy moodulitega ja kasutamiseks sobib vaid apache22 mis sisaldab meile vajalikku proxy balancerit
+
Nb! kui muudate database.yml faili tuleb veebiserverit taaskäivitada
  
cd /usr/ports/apache22
+
nüüd peaksime enda projekti nägema aadressil http://www.nimi.ee:3000
make install with_proxy_modules=yes
 
  
gem install mongrel
+
[[Pilt:Railsiveb.jpg]]
gem install mongrel_cluster
 
  
Lihtsaim viis mongrelit kasutada on ta startida nagu webrick.
+
===Railsi logid===
  
cd progeadmin
+
Logid võivad railsil kasvada päris suureks seetõttu oleks mõistlik need roteerima panna
$ mongrel_rails start -d
 
  
ja seiskamiseks
+
näiteks sobiks logrotate jaoks selline blokk
  
  $ mongrel_rails stop
+
  /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
 +
  }
  
Antud juhul on meil keerukam probleem nimelt
+
ja liikudes urlile http://www.nimi.ee:8000/katsetus
on kaks eraldi railsis loodud programmi, mis asuvad
 
 
 
/home/rails/progeadmin/
 
/home/rails/veebiadmin/
 
 
 
Ning vaja oleks ,et progeadmin avaneb aadressiga www.katse.ee ja veebiadmin www.nimi.ee
 
ja samas saaks serveris kasutada ka mitmesugust saatilist materjali ja teisi lehti.
 
 
 
Mongrel Cluster seadistus neile kahele tarkvarale
 
 
 
 
 
# cd /home/rails/progeadmin
 
# mongrel_rails cluster::configure -e production -p 8000 -N 3 -a 127.0.0.1
 
Writing configuration file to config/mongrel_cluster.yml.
 
 
 
# cd veebiadmin
 
# mongrel_rails cluster::configure -e production -p 8100 -N 3 -a 127.0.0.1
 
Writing configuration file to config/mongrel_cluster.yml.
 
 
 
 
 
Need käsud kirjutavad konfiguratsiooni faili kummagile config/mongrel_cluster.yml.
 
  
n2iteks /home/progeadmin/rails/config/mongrel_cluster.yml sisu n2eb v2lja selline
+
peaksime nägema kirja "Hello world"
 
 
log_file: log/mongrel.log
 
port: "8000"
 
environment: production
 
address: 127.0.0.1
 
pid_file: tmp/pids/mongrel.pid
 
servers: 3
 
 
 
Mongrel clustrite startimiseks tuleb
 
 
 
# cd progeadmin
 
# mongrel_rails cluster::start
 
starting port 8000
 
starting port 8001
 
starting port 8002
 
 
 
# cd  veebiadmin
 
# mongrel_rails cluster::start
 
starting port 8100
 
starting port 8101
 
starting port 8102
 
 
 
Nende käskude peale käivituvad kummagi railsi kohta kolm mongrel protsessi
 
Esimesel portidele 8001 8002 8003 ja teisel 8101 8102 8103
 
 
 
 
 
httpd.conf
 
 
 
Kontrollime, et oleks laaditud moodulid
 
 
 
proxy_module
 
proxy_connect_module
 
proxy_http_module
 
proxy_balancer_module
 
 
 
 
 
Nüüd loome mõlemale progele nende vhostid
 
 
 
NameVirtualhost 193.40.0.62:80
 
 
<VirtualHost 193.40.0.62:80>
 
  ServerName www.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
 
  RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]
 
 
</VirtualHost>
 
 
<VirtualHost 193.40.0.62:80>
 
  ServerName www.nimi.ee
 
  DocumentRoot /home/rails/veebiadmin/
 
 
  <Directory "/home/rails/veebiadmin/">
 
    Options FollowSymLinks
 
    AllowOverride None
 
    Order allow,deny
 
    Allow from all
 
  </Directory>
 
 
  RewriteEngine On
 
 
  # Redirect all non-static requests to cluster
 
  RewriteRule ^/(.*)$ balancer://mongrel_cluster2%{REQUEST_URI} [P,QSA,L]
 
 
</VirtualHost>
 
 
 
<Proxy balancer://mongrel_cluster>
 
    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_cluster2>
 
    BalancerMember http://127.0.0.1:8101
 
    BalancerMember http://127.0.0.1:8102
 
    BalancerMember http://127.0.0.1:8103
 
</Proxy>
 
 
Listen 8000
 
<VirtualHost 193.40.0.10:8000>
 
  <Location />
 
    SetHandler balancer-manager
 
    Deny from all
 
    Allow from localhost
 
  </Location>
 
</VirtualHost>
 
 
 
 
 
 
 
Edasine seadistus
 
 
 
Juhul kui muutub railsi versioon tuleks uuenda ka koodi
 
 
 
rake rails:update
 
 
 
Juhtum kui on railsi kood vaja domeenis tuua esile kujul http://www.nimi.ee/admin
 
samas kui www.nimi.ee all on teine kood v2i veeb
 
 
 
  # 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]
 
  
 
===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.webmasterwords.com/ruby-rails-mongrel-apache-easy
 
 
 
Veel suurem hulk näiteid
 
  
http://www.digitalmediaminute.com/article/1816/top-ruby-on-rails-tutorials
+
* 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