Ruby on Rails rakenduste kasutamine

Eeldused juhendi järgi tegutsemiseks


Vajalik on iseteeninduses lisatud SSH konto.

Juhendit järgides, kasutada domeen.ee asemel oma veebilehe domeeni, näiteks minukoduleht.ee
Juhendit järgides, kasutada vhost00000ssh asemel oma SSH konto kasutajanime, näiteks vhost7998ssh



Ruby on Rails kohandatava ruby versiooniga

Proovime panna tööle viimase versiooni ruby'st ja rails'ist rubyonrails.org Guides -> Getting Started with Rails juhendi järgi.


Vajaliku ruby versiooni paigaldamine

Vaikimisi on testitava lehe serveris installitud ruby 2.1.9.

$ ruby -v
ruby 2.1.9p490 (2016-03-30 revision 54437) [amd64-freebsd10]

Juhend ütleb, et oleks vaja vähemalt versiooni 2.2.2, seetõttu tuleb paigaldada vajalik versioon ruby'st ise.

Kasutame soovitud ruby versiooni paigaldamiseks rbenvi (https://github.com/rbenv/rbenv). rbenv võimaldab paigaldada ja kasutada täpselt sellist ruby versiooni nagu projekti jaoks vaja ning vajadusel paigaldatud versioonide vahel ümber lülituda.

Viimane ruby versioon on juhendi kirjutamise ajal 2.3.1 ning viimane railsi versioon v5.0.0.1. Kasutame rbenvi, et sellega need installeerida.

rbenv on serveritesse eelpaigaldatud ja seda võib kohe kasutama hakata.



Juhul kui mingil põhjusel rbenvi siiski pole või on vaja paigaldada mingi muu versioon rbenvist, siis rbenvi paigaldamise juhend asub lehel https://github.com/rbenv/rbenv. Käesoleva juhendi kirjutamise ajal käib rbenvi paigaldus järgnevalt:

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

Hetkel ei saa rbenvi veel kasutada, kuna süsteem ei leia seda üles (kui eelpaigaldatud rbenvi pole. Juhul kui on, siis kuvab vana versiooni infot):

$ type rbenv
-bash: type: rbenv: not found

Selle jaoks, et süsteem uue rbenvi üles leiaks, tuleb selle binaari asukoht lisada PATHi. Selle jaoks on käsklus:

$ export PATH="$HOME/.rbenv/bin:$PATH"
$ type rbenv
rbenv is /www/apache/domains/www.domeen.ee/.rbenv/bin/rbenv


Uute ruby versioonide paigaldamise võimaldamiseks tuleb paigaldada ka ruby-build (https://github.com/rbenv/ruby-build). Käesoleva juhendi kirjutamise ajal käib ruby-buildi paigaldus järgnevalt:

$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

rbenv versions käsklus kuvab hetkel paigaldatud versioone ja tärniga on tähistatud kasutuses olev versioon. Kuna ühtegi uut versiooni pole veel paigaldatud, siis kuvatakse listis vaid system - ehk eelpaigaldatud ruby.

$ rbenv versions
* system (set by /www/apache/domains/www.domeen.ee/.rbenv/version)

Paigaldame soovitud versiooni 2.3.1:

$ rbenv install 2.3.1
Downloading ruby-2.3.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2
Installing ruby-2.3.1...
Installed ruby-2.3.1 to /www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1

Versioonide all kuvatakse nüüd ka uut versiooni.

$ rbenv versions
* system (set by /www/apache/domains/www.domeen.ee/.rbenv/version)
  2.3.1

RoR rakenduse paigaldamiseks tuleb gem-e installida. gemi keskkond on hetkel seadistatud 2.1.9 ruby vastu:

$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.6.4
  - RUBY VERSION: 2.1.9 (2016-03-30 patchlevel 490) [amd64-freebsd10]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/2.1
  - USER INSTALLATION DIRECTORY: /www/apache/domains/www.domeen.ee/.gem/ruby/2.1
  - RUBY EXECUTABLE: /usr/local/bin/ruby21
  ...

Käivitame veel ühe käskluse, mis registreerib mõned rbenvi võimalused, nagu näiteks rbenv shell'i:

eval "$(rbenv init -)"

Määrame ruby 2.3.1 kasutatavaks versiooniks rbenv shell käsklust kasutades:

$ rbenv shell 2.3.1

Kontrollime, mis versiooni nüüd kasutatakse:

$ rbenv versions
  system
* 2.3.1 (set by RBENV_VERSION environment variable)
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-freebsd10.2]
$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.5.1
  - RUBY VERSION: 2.3.1 (2016-04-26 patchlevel 112) [x86_64-freebsd10.2]
  - INSTALLATION DIRECTORY: /www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0
  - USER INSTALLATION DIRECTORY: /www/apache/domains/www.domeen.ee/.gem/ruby/2.3.0
  - RUBY EXECUTABLE: /www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1/bin/ruby
  ...

Kui on soov iga kord peale SSH keskkonda sisse logimist rbenvi kasutada, ilma et peaks ise käivitama eelnevaid export PATH ja eval "$(rbenv init -)" käsklusi, tuleks need käsklused ~/.bash_profile faili lisada. Seda saab teha järgnevalt:

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

Selleks, et järgmisel sisse logimisel ka viimati aktiveeritud 2.3.1 oleks kohe aktiivne, tuleks jooksutada käsklust:

$ rbenv global 2.3.1

Logime välja ja uuesti sisse.

$ ssh -p 1022 vhost00000ssh@domeen.ee
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-freebsd10.2]

Nüüd on kõik valmis railsi paigaldamiseks:

$ gem install rails
$ rails -v
Rails 5.0.0.1

Uue railsi aplikatsiooni loomine

Loome railsiga uue aplikatsiooni (rails new -h kuvab erinevaid võimalusi).

Teeme aplikatsiooni nimega website:

$ rails new ~/website -O

Luuakse kataloog /www/apache/domains/www.domeen.ee/website/


Apache ja fcgi

Apache veebiserveri jaoks tuleb veel paigaldada fcgi gem (rubyt saab jooksutada läbi Apache fcgi, eraldi pordil ei ole lubatud serverit kuulama panna). Paraku ei õnnestunud meil fcgi gemi rbenvi keskkonnas paigaldada, alternatiivse lahendusena toimib hetkel ruby versiooni vahetamine eelpaigaldatud versioonile, seal fcgi gemi paigaldamine ruby 2.3.1 gemide kataloogi ning seejärel tagasi 2.3.1 versioonile lülitumine. Paigaldamise teekonnana kasuta 2.3.1 shellis gem env INSTALLATION DIRECTORY teekonda, meie testis on see /www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0
PS. Andke teada, kui leiate parema lahenduse!

$ rbenv shell system
$ gem install fcgi --install-dir /www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0
$ rbenv shell 2.3.1

Lisa gem 'fcgi', '~> 0.9.2.1', :path => "/www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/fcgi-0.9.2.1" website/Gemfile lõppu.

$ echo "gem 'fcgi', '~> 0.9.2.1', :path => \"/www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/fcgi-0.9.2.1\"" >> ~/website/Gemfile

dispatch.fcgi

Nüüd on esmaseks testiks kõik vajalikud pakid paigaldatud. Järgmiseks tuleb tekitada dispatch.fcgi fail kataloogi ~/htdocs/cgi-bin
Selle sisuks:

#!/www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1/bin/ruby

require_relative '../../website/config/environment'

class Rack::PathInfoRewriter
  def initialize(app)
    @app = app
  end

  def call(env)
    env.delete('SCRIPT_NAME')
    parts = env['REQUEST_URI'].split('?')
    env['PATH_INFO'] = parts[0]
    env['QUERY_STRING'] = parts[1].to_s
    @app.call(env)
  end
end

Rack::Handler::FastCGI.run  Rack::PathInfoRewriter.new(Website::Application)

Siin tuleb tähele panna, et esimesel real oleks rbenvi soovitud ruby versiooni binaari teekond ehk gem envi RUBY EXECUTABLE väärtus (/www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1/bin/ruby).

require_relative '../../website/config/environment' - peab kasutama kataloogi, mida kasutati railsiga projekti loomisel (rails new website -O) - meie testis seega website.

Rack::PathInfoRewriter.new(Website::Application) - siin tuleb Website::Application kohal kasutada väärtust ~/website/config/application.rb failist "module" algusega realt. Meie testis on selleks module Website, seega kasutame Website::Application

Salvesta ~/htdocs/cgi-bin/dispatch.fcgi fail ja luba selle käivitamine.

$ chmod +x ~/htdocs/cgi-bin/dispatch.fcgi

.htaccess

Viimase sammuna tuleb tekitada ~/htdocs/.htaccess fail, mille abil kõik Apache veebipäringud suunata dispatch.fcgi faili pihta.
Sisuks:

AddHandler fcgid-script .fcgi
SetEnv RAILS_ENV production
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ cgi-bin/dispatch.fcgi/$1 [QSA,L]

Testimine

Avades lingi http://domeen.ee peaksid nägema "Yay! You’re on Rails!" tervituslehte.

Juhul kui näed Error 500 lehekülge, läks midagi valesti. Proovi käsitsi dispatch.fcgi faili käivitada ja vaata, mis veateadet kuvatakse. Näide:

$ ~/htdocs/cgi-bin/dispatch.fcgi 
/www/apache/domains/www.domeen.ee/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require': cannot load such file -- fcgi (LoadError)
...

Juhul kui sealt midagi kasulikku ei paista, siis võta meiega ühendust ja proovime veebiserveri pealogist midagi asjalikumat leida.

Tekitame oma avalehe.

Kui veel pole kodukataloogis, siis minna kõigepealt sinna.

$ cd ~

Olles kodukataloogis:

$ bin/rails generate controller Welcome index

Lingilt http://domeen.ee/welcome/index avaneb nüüd railsi poolt vaikimisi tekitatud sisu ja viide failile, kus seda muuta saab. Selle jaoks, et see leht avaneks otse http://domeen.ee/ pealt, tuleb muuta config/routes.rb faili ja lisada sinna peale get 'welcome/index' rida:

root 'welcome#index'

Nüüd kuvab http://domeen.ee/ sama vaadet.

Kui peale koodi muutmist lehel midagi ei muutu, on see ilmselt sellest, et dispatch.fcgi protsess jookseb. Selle protsessi peatamise järel käivitatakse uus protsess ja kajastuvad ka muudatused. Protsessi peatamiseks kasuta käsklust:

$ pkill -f dispatch.fcgi

rbenvi eemaldamine

rbenvi saab vajadusel eemaldada järgnevalt (eemaldab kõik rbenvi abil paigaldatud ruby versionid ja gemid).

$ rm -rf `rbenv root`
$ rm ~/.ruby-version

~/.bash_profile failist eemaldada:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

logida SSH keskkonnast välja ja uuesti sisse.




RoR eelpaigaldatud rubyga

Viimast railsi ei saa eelpaigaldatud ruby versiooniga installeerida (kuna vajab uuemat), kuid vanemaid versioone küll. Juhul kui eelpaigaldatud versioon sobib, pole otseselt vajalik rbenvi kasutada ja võib rakenduse tööle panna ka ilma selleta.

Kasutame gem envist USER INSTALLATION DIRECTORYT, milleks meie testi puhul on /www/apache/domains/www.domeen.ee/.gem/ruby/2.1 ehk ~/.gem/ruby/2.1

$ gem install rails -v 4.2.7.1 --install-dir ~/.gem/ruby/2.1

Testime paigaldatud railsi:

$ ~/.gem/ruby/2.1/bin/rails -v
Rails 4.2.7.1

Selleks, et toimiks käsklus rails, tuleb täiendada ~/.bash_profile faili.

echo 'PATH=$PATH:~/.gem/ruby/2.1/bin' >> ~/.bash_profile

Logida SSH-st välja ja sisse või käivitada:

$ source ~/.bash_profile
$ rails -v
Rails 4.2.7.1

Loome uue aplikatsiooni, kuid bundle installi veel ei käivita (-B võti).

$ rails new website -O -B

Läheme projekti peakataloogi:

$ cd ~/website/

Lisame fcgi gemi Gemfile'i:

$ echo "gem 'fcgi', '~> 0.9.2.1'" >> ~/website/Gemfile

Nüüd on kõik vajalikud gemid kirjas ja teeme bundle installi:

$ bundle install --path ~/.gem/ruby/2.1

Eelmises rbenvi kasutamisega kirjeldatud näites välja toodud dispatch.fcgi faili alguses (vaata pealkirja dispatch.fcgi) tuleb eelpaigaldatud versiooni kasutades lisada mõned environment muutujate definitsioonid. Ülejäänud faili kood jääb samaks.

#!/usr/local/bin/ruby

ENV['HOME'] ||= '/www/apache/domains/www.domeen.ee'
ENV['GEM_HOME'] = File.expand_path('~/.gem/ruby/2.1/')
ENV['GEM_PATH'] = File.expand_path('~/.gem/ruby/2.1/')

Kasutada eelmisest näitest sama sisuga .htaccess faili (vaata pealkirja .htaccess) ja veebist peaks avanema Ruby on Railsi vaikimisi leht.

Ei leidnud, mida otsisid? Küsi meilt, me aitame!

Helista numbril 683 5188 või kirjuta abi@veebimajutus.ee

Või saada oma küsimus siin, võtame sinuga ühendust nii pea, kui võimalik.

Vale vastus
Cart