Membuat Applikasi Rails 3 dengan Menggunakan Phusion Passenger

Posted in Scripting & Development , written by wahya on 08 August 2012

Pada tutorail berikut ini akan dijelaskan langkah – langakah dalam membuat applikasi Rails 3 baik pada root domain (http://nama-domain.com) , sub domain (http://nama-domain.com) atau pada sub direktori (http://nama-domain.com/subdir/). Untuk melakukan hal tersebut, mohon diperhatikan mengganti file konfigurasi routes.rb.

Notes: semua langkah – langkah berikut hanya bisa dilakukan via command line, jadi asumsi dari tutorial ini adalah bahwa Anda sudah terbiasa dengan  SSH, tools command line  atau editors nya. Pada tutorial ini, saya akan menggunakan editor vim, namun itu terserah pilihan Anda.

Deployment Method: Phusion Passenger

Meskipun cPanel telah memilih untuk menggunakan sistem berbasis Mongrel, namun tidak menggunakan konfigurasi itu dan sebagai gantinya kami memilih menggunakan Phusion Passenger untuk distribusi Rails di seluruh server kami. Kami telah menemukan bahwa Passenger lebih dapat diandalkan dan bekerja lebih baik.

Gem management with Bundler

Jika Anda sudah familiar dengan Rails 3, Anda pasti sudah tahu Bundler kini menjadi cara standar untuk mengelola dan menginstal Gems Anda dalam aplikasi Rails 3. Bundler juga bisa digunakan dengan aplikasi Rails 2.3.  Anda dapat membaca lebih lanjut tentang itu di sini: http://gembundler.com/rails23.html.

Getting started

Sebagian besar server kami sudah memiliki Rails 3 Gems pra-instal, tetapi jika misalnya pada server Anda tidak terinstall yang sesuai dengan keinginan Anda, Anda dapat dengan mudah menginstal sendiri di dalam account Anda. Untuk memeriksa versi Rails yang telah Anda konfigurasi, ketik perintah berikut ketika login melalui SSH:

rails -v

DON’T SKIP: Selama outputnya adalah versi 3 atau lebih besar, silahkan lanjutkan! Jika tidak, silahkan lakukan pengaturan custom Gems environment Anda terlebih dahulu.

CATATAN: Jika Anda melihat USERNAME dalam huruf besar, gantilah dengan username akun hosting Anda di Mongkiki.com. Selain itu, ketika Anda melihat tanda tilde (~) , ini hanyalah sebuah metode di Linux untuk referensi direktori home Anda tanpa harus menulis itu secara penuh.

Variabel environement $HOME juga sama. Hal ini sangat membantu dalam pembuatan tutorial ini sehingga Anda dapat menyalin dan menyisipkan perintah dengan mudah. Sebagai contoh:

-jailshell-3.2$ echo ~
/home/USERNAME
-jailshell-3.2$ echo $HOME
/home/USERNAME
-jailshell-3.2$ pwd
/home/USERNAME

Creating a test application

  1. Saat ini Rails 3 telah terkonfigurasi dengan baik. Mari kita setup aplikasi tes. Saya akan menyimpan aplikasi saya di /home/USERNAME/rails3test. Anda bebas untuk menginstal aplikasi Anda di manapun Anda inginkan, tetapi panduan ini akan menggunakan direktori rails3test.Untuk membuat proyek kosong, jalankan perintah berikut (perhatikan bahwa mereka telah berubah sejak Rails 2.x):
    rails new ~/rails3test -d mysql
  2. Saya akan menyiapkan aplikasi saya di public_html saya, tetapi Anda bebas untuk menginstal di mana saja yang Anda inginkan. Kita perlu untuk memindahkan public_html dengan sitak berikut:
    mv ~/public_html ~/public_html.moved

    Dan kemudian buat sysm link:

    ln -s ~/rails3test/public ~/public_html
  3. Seperti biasanya, kita perlu menghapus file default index.html yang terinstal pada applikasi default:
    rm -f ~/rails3test/public/index.html

    Aktifkan Phusion Passenger dengan menjalankan kode berikut:

    echo -e "PassengerEnabled OnnPassengerAppRoot $HOME/rails3testn" > ~/rails3test/public/.htaccess

    Atau tambahakan secara manual line berikut secara manual pada file .htaccess:

    PassengerEnabled On
    PassengerAppRoot /home/USERNAME/rails3test
  4. Selanjutnya kita harus melakukan konfigurasi Bundler. Bundler sudah terinstall pada server Anda, dimana fungsinya adalah mengelola seluruh Gems dalam sebuah file dengan nama “Gemfile” dalam direktori root dalam applikasi Anda (~ / rails3test/Gemfile). Jika Anda ingin menambahakan Gems lain dalam applikasi ini, file tersebutlah yang seharusnya Anda edit. Bukalah file tersebut dengan editor, dan secara default akan terlihat sperti berikut (jangan khawatir kalau isinya terlihat berbeda):
    source 'http://rubygems.org'
    
    gem 'rails', '3.1.0'
    
    # Bundle edge Rails instead:
    # gem 'rails',     :git => 'git://github.com/rails/rails.git'
    
    gem 'mysql2'
    
    gem 'json'
    
    # Gems used only for assets and not required
    # in production environments by default.
    group :assets do
      gem 'sass-rails', "  ~> 3.1.0"
      gem 'coffee-rails', "~> 3.1.0"
      gem 'uglifier'
    end
    
    gem 'jquery-rails'
    
    # Use unicorn as the web server
    # gem 'unicorn'
    
    # Deploy with Capistrano
    # gem 'capistrano'
    
    # To use debugger
    # gem 'ruby-debug'
  5. Nah saat ini Bundler Gems sudah disetup, sekarang tinggal melakukan installasi. Ketikan command berikut ini untuk melakukan installasi Gems dan file dependency nya:
    cd ~/rails3test/; bundle install --path vendor/bundle

    Command tersebut akan melakukan installasi semua gems kedalam ‘vendor/bundler’ didalam direktori applikasi Anda. Mohon diingat bahwa Anda perlu melakukan setup Bundler dan Gemfile pada setiap applikasi pada akun Anda.

  6. Pada tahap ini, applikasi Anda telah memiliki Passenger yang telah mendeteksi Bundler dan Rails 3. Namun Anda masih perlu melakukan setup MySQL dan routing agar applikasi Anda benar-benar berfungsi dengan baik.Masuk ke cPanel Anda, dan buatlah MySQL username dan database. Kemudian buka file berikut dengan text editor:
    vi ~/rails3test/config/database.yml

    Anda akan melihat konfigurasi database untuk produksi, test dan development environment. Passenger bekerja dibawah environment Production, maka kita perlu mengganti pada section tersebut.  Kira – kira akan seperti berikut, namun ganti sesuai dengan informasi akun database Anda tadi:

    production:
    adapter: mysql2
    encoding: utf8
    reconnect: true
    database: USERNAME_rails3test
    pool: 5
    username: USERNAME_rails3test
    password: myverysecurepassword
    socket: /tmp/mysql.sock

    Simpan dan tutup file tersebut.

  7. Selanjutnya, mari kita buat scafolding. Pada contoh berikut kita berinama ‘User’ yang akan menyimpan nama dan umur sesorang. Jalankan command berikut pada applikasi Anda
    cd ~/rails3test/; rails generate scaffold User name:string age:integer

    Seperti yang Anda lihat, generator berubah di Rails 3.x. Perintah tersebut akan membuat controller dengan nama ‘User’ dan semua metode yang diperlukan (index / edit / show / new) untuk berinteraksi dengan database kami. Command ini juga akan membuat file migrasi (db/migrate/20101007121721_create_users.rb).

    Selanjutnya Anda perlu melakukan migrasi database, sehingga table baru terbuat pada MySQL

    cd ~/rails3test/; rake db:migrate --trace RAILS_ENV='production'

    Anda akan melihat data seperti berikut:

    (in /home/USERNAME/rails3test)
    ** Invoke db:migrate (first_time)
    ** Invoke environment (first_time)
    ** Execute environment
    ** Invoke db:load_config (first_time)
    ** Invoke rails_env (first_time)
    ** Execute rails_env
    ** Execute db:load_config
    ** Execute db:migrate
    ==  CreateUsers: migrating ====================================================
    -- create_table(:users)
       -> 0.0795s
    ==  CreateUsers: migrated (0.0796s) ===========================================
    
    ** Invoke db:schema:dump (first_time)
    ** Invoke db:load_config
    ** Execute db:schema:dump
  8. Selanjutnya mari kita setup routing, sehingga controller ‘User’ menjadi controller default. Buka file berikut:
    vi ~/rails3test/config/routes.rb

    Cari string “root:to => ” pada file tersebut, kemudian rubah menjadi seperti berikut:

    root :to => "users#index"

    Simpan kemudian tutup file tersebut.

  9. Jika Anda mengakses website Anda pada tahap ini, lakukan restart paksa terhadap Passenger agar semua perubahan dapat dikenali dengan menggunakan sintak berikut:touch ~/rails3test/tmp/restart.txt

    Kemudian refresh website Anda di browser. Seharusnya semua berjalan dengan baik. Nah Anda akan melihat halaman website sederhana dengan tampilan isi dari database users, kurang lebih seperti ini:

    Listing users
    Name Age
    New User

    Klik “New User” untuk menambahakan user baru.

    Common Problems & Errors
    1. Jika Anda beberpa command rails (generate scafolding), error dibawah akan muncul:

    Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

    Hal tersebut berarti Anda tidak melupakan gems  “execjs” dan “therubyracer”. Tambahakan gems tersebut pada Gemfile Anda, kemudian re-bundle:

    cd ~/rails3test/; echo -e “gem ‘execjs’ngem ‘therubyracer'” >> Gemfile; bundle install –path vendor/bundle

    2. Applikasi Anda tidak mau start dan error berikut muncul pada production.log

    Processing by UsersController#index as HTML
    Rendered users/index.html.erb within layouts/application (0.3ms)
    Completed 500 Internal Server Error in 2ms
    
    ActionView::Template::Error (application.css isn't precompiled):

    Anda perlu melakukan precompile terhadap CSS Anda pada saat Anda berada di production environment:

    cd ~/rails3test/; rake assets:precompile
     
    Kemudian restart applikasi Anda:

    touch ~/rails3test/tmp/restart.txt

    3.  Jika Anda mendapatkan error 404 ketika mengakses website, biasa ini adalah masalah routing. Cek file routing.rb

    4. Jika Anda mendapatkan error “Access denied for user ‘root’@’localhost’ (using password: NO)” ketika menjalankan rake db:migrate, pastikan jika variable RAILS_ENV dispesifikasi dengan benar, atau jika tidak maka akan secara default database development akan di migrasi ke database production pada saat yang diinginkan.

    5. Jika error “Access denied for user ‘[email protected]’localhost” masih saja muncul, mungkin Anda lupa dengan username atau password database Anda. Pada saat membuat username dan database, jangan lupa untuk memberikan hak akses kepada username tersebut pada database yang Anda inginkan dengan menggunakan cPanel.

Share on Facebook or , read previous article or go to the next one.