Ruby on Rails rakenduste kasutamine
Eeldused juhendi järgi tegutsemiseks
Vajalik on iseteeninduses lisatud SSH konto.
Asenda juhendis domeen.ee oma veebilehe domeeniga, näiteks minukoduleht.ee.
Kasuta 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, seega 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. Vajadusel saab paigaldatud versioonide vahel ka ü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 rbenvi mingil põhjusel ikkagi ei ole või Sul on vaja paigaldada mingi muu versioon rbenvist, siis vaata rbenvi paigaldamise juhendit: https://github.com/rbenv/rbenv. Meie juhendi kirjutamise hetkel käib rbenvi paigaldus järgnevalt:
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv |
Hetkel ei saa rbenvi veel kasutada, sest süsteem ei leia seda üles (eeldusel, et rbenvit ei ole eelpaigaldatud. Kui see oli varasemalt olemas, siis kuvab see vana versiooni infot):
$ type rbenv -bash: type: rbenv: not found |
Selleks, 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 paigaldamiseks tuleb veel enne paigaldada ka ruby-build (https://github.com/rbenv/ruby-build). Meie juhendi kirjutamise hetkel 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. Tärniga on tähistatud kasutuses olev versioon. Kuna ühtegi uut versiooni ei ole 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 soovid rbenvi kasutada iga kord peale SSH keskkonda sisse logimist, ilma et peaksid ise käivitama eelnevaid export PATH ja eval "$(rbenv init -)" käsklusi, siis 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 viimati aktiveeritud 2.3.1 kohe aktiivne oleks, 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). Selleks kasuta käsklust:
gem install fcgi -- --with-fcgi-include=/usr/local/include --with-fcgi-lib=/usr/local/lib |
Juhul kui eelneva käsklusega ei õnnestu fcgi gemi rbenvi keskkonnas paigaldada, toimib alternatiivse lahendusena ruby versiooni vahetamine eelpaigaldatud versioonile, 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
$ 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 Sul 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 pane tähele, 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 mine 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 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 pärast koodi muutmist lehel ikka 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 -)" |
Logi SSH keskkonnast välja ja uuesti sisse.
RoR eelpaigaldatud rubyga
Viimast railsi ei saa eelpaigaldatud ruby versiooniga installeerida (kuna vajab uuemat), vanemaid versioone aga küll. Juhul kui eelpaigaldatud versioon Sulle sobib, siis pole otseselt vaja 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 |
Logi SSH-st välja ja sisse või käivita:
$ 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 |
Üleval 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/') |
Kasuta eelmisest näitest sama sisuga .htaccess faili (vaata pealkirja .htaccess) ja veebis peaks avanema Ruby on Railsi vaikimisi leht.