Digital ocean, alternatif hosting Rails

VPS Murah untuk Hosting Rails

Salah satu kendala yang sering ditanyakan teman-teman pengembang rails adalah susahnya mencari  hostingan untuk aplikasi yang sudah dibuat. Maklum, kalau Rails kan tidak bisa pakai shared hosting yang umum seperti aplikasi PHP misalnya.

Salah satu favorit saya untuk mencari hostingan murah adalah website LowEndBox.com. Di sini biasanya terdapat tawaran-tawaran diskon untuk VPS. Yah, memang speknya tidak wah sih, tapi cukup lah untuk membuat proyek hobi atau aplikasi mock-up kita. Saya menghosting Brentimana.com di VPS diskonan dari https://crissic.net/ berdasarkan info dari LowEndBox. !5 dolar saja setahun, hehe.

Digital ocean, alternatif hosting Rails

Kalau mau yang lokasinya dekat sini dan bisa di-scale dengan mudah, bisa coba DigitalOcean.  Setup hosting termurah, yang disebut droplets, bisa mulai dari 5 USD per bulan, dan lokasinya ada yang di Singapura (kapan masuk Jakarta yah). Saya sudah pernah coba ini dan sejauh ini memuaskan. Oh ya, kalau baru daftar, coba cari kupon-kupon DO. Lumayan, bisa dapat diskon 10-15 USD.

Atau kalau benar-benar tidak mau repot dan asal online saja dulu, bisa menggunakan layanan heroku. Heroku adalah penyedia layanan PAAS. Bedanya dengan hosting VPS biasa, kita tidak perlu mensetup server kita sendiri dan tinggal upload app saja. Untuk layanan basicnya boleh gratis dulu. Aplikasi pemantau data KPU http://rekapda1.herokuapp.com/  contohnya, saya yakin dihosting gratisan di heroku, hehehe. Semacam Heroku ada juga Openshift, yang ini saya belum pernah coba. Oh ya, Openshift ini merupakan produk RedHat, jadi sepertinya boleh juga. Kalau ada yang pernah pakai, boleh share dong pengalamannya :D

Sebagai penutup, menyambut Hari Raya Idul Fitri 1435H, saya mohon maaf atas segala kesalahan. Semoga kita semua termasuk orang-orang yang mendapat kemenangan!

Instalasi Rails 4 di Ubuntu 12.04

Yow, setelah beberapa saat berniat menulis soal topik ini, akhirnya saya tunaikan juga, hehe.

Ini untuk orang yang baru mulai ingin mencoba Rails. Buat yang berencana menggunakan windows, saya sarankan sebaiknya menggunakan Mac atau linux saja, misalnya ubuntu. Ini untuk kelancaran pengembangan aplikasi selanjutnya menggunakan library2 tambahan. Kalau ada kesulitan juga lebih gampang nanyanya, karena lebih banyak programmer rails yang menggunakan linux dan mac :D

Ok, mari kita mulai saja. Pertama, update apt-get di terminal, lalu install program2 pendukung.

$ sudo apt-get update
$ sudo apt-get install build-essential zlib1g-dev curl git-core sqlite3 libsqlite3-dev

Untuk menyiapkan environment ruby, install rbenv dan ruby-build.

$ cd ~
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source .bash_profile

 

$ cd ~
$ git clone git://github.com/sstephenson/ruby-build.git
$ cd ruby-build/
$ sudo ./install.sh

Install versi ruby (dan rubygems) yang diinginkan, misalnya 1.9.3-p448

$ rbenv install 1.9.3-p448
$ rbenv rehash
$ rbenv global 1.9.3-p448

Install nodejs, karena Rails perlu javascript runtime. Bila ubuntu anda versi 12.10, ganti  ‘python-software-properties’ dengan ‘software-properties-common’

$ sudo apt-get install python-software-properties
$ sudo apt-add-repository -y ppa:chris-lea/node.js
$ sudo apt-get install nodejs

Install bundler dan rake

gem install rdoc
gem install bundler
gem install rake 
rbenv rehash

Akhirnya, kita siap untuk menginstall Rails!

gem install rails

Nah, seharusnya sekarang sistem Anda sudah siap untuk ber-rails ria. Sejujurnya, saat menulis ini saya tidak mencek ulang perintah-perintahnya, karena sistem saya baru saja saya set ulang, tapi seharusnya tidak ada masalah. Kalau anda menemukan masalah, mohon masukannya.

Semoga bermanfaat!

 

 

Mengirimkan variabel Rails ke Javascript Lewat Gon

Weekend kemarin, saya mulai coba menambahkan beberapa Javascript ke Brentimana. Pertanyaan pertama yang muncul, bagaimana ya mengirimkan variabel dari controller supaya bisa diapakai Javascript? Setelah ubek-ubek Stackoverflow sebentar, ketemu halaman  ini.

Intinya adalah menambahkan versi JSON dari si variabel ke dalam HTML kita dengan id tertentu, yang kemudian bisa diambil oleh Javascript.

Misalnya di dalam controller ditulis

@rails_array = [1 2 3]

tambahkan di dalam views

<script id="rails_array_json" type="text/json">
    <%= raw @rails_array.to_json %>
</script>

Maka variable dapat diparsing di Javascript. Misal kalau kita menggunakan JQuery

$(function () {

    var array_json = $("#rails_array_json").html(),
        array_parsed     = $.parseJSON(array_json);

    console.log(array_parsed);

});

Tapi kalau perlu mengirimkan banyak variable, cara manual di atas tampaknya kurang praktis. Untung ada Gon Dengan gon mengirimkan variabel ke Javascript menjadi jauh lebih mudah.

Pertama install Gon dengan menambahkan di Gemfile

gem "gon"

dan menjalankan

$ bundle install

Cara penggunaannya, diambil dari readme Gon:

Di view/layouts/application.html.erb, include gon

<head>
  <title>some title</title>
  <%= include_gon %>
  <!-- include your action js code -->
  ...

Di controller, tulis variabel

gon.variable_name = variable_value

 Ambil variabel di javascript dengan

if gon {
  var js_var = gon.variable_name
}

Blok if ditambahkan karena secara default Rails mengkompilasi seluruh javascript kita menjadi satu file. Bila kita sedang menjalankan controller yang tidak menggunakan gon, tanpa blok ‘if’ javascript akan error.

Demikian, semoga bermanfaat!

 

 

Memperkenalkan Brentimana.com !

Halo, sudah cukup lama ya?
Oh, sebelumnya saya mengucapkan selamat berpuasa bagi yang menjalankan. Semoga Ramadhan kali ini menjadikan kita lebih baik lagi.

Akhirnya proyek pertama saya online juga: Brentimana.com

Brentimana.com adalah sebuah aplikasi web untuk mencari halte Transjakarta alias busway dari lokasi tertentu. Ini adalah proyek akhir pekan saya, artinya bukan pesanan siapa-siapa, hehe. Idenya berawal dari saya yang kini tinggal di TangSel dan cukup sering harus ke Jakarta, entah untuk bekerja atau ada undangan. Transjakarta adalah favorit saya di Jakarta. Sayangnya, saya sering tidak tahu, harus berhenti di halte apa untuk sampai di tempat tujuan saya. Akhirnya terbitlah aplikasi ini.

Screenshot Brentimana.com

Aplikasinya sendiri cukup sederhana. Front-end mengandalkan Bootstrap, dan tentu dibangun dengan Ruby on Rails. Untuk pencarian saya menggunakan Google Maps API dengan bantuan gem Geocoder. Untuk menampilkan petanya, saya menggunakan gem Gmaps4Rails.

Oke, silahkan dicoba ya aplikasinya. Saran dan kritik sangat ditunggu lho!

Membaca file CSV untuk mengisi database Rails

Singkat cerita, saya ingin membuat sebuah web app sederhana, Brentimana (github), untuk belajar Rails. Tujuan appnya:

  1. pengguna bisa mencari halte Transjakarta terdekat dari suatu tempat
  2. pengguna bisa melihat tempat-tempat apa saja yang terjangkau dari suatu halte Transjakarta

Oh ya, untuk bekal membuat aplikasi ini sebelumnya saya sudah menyelesaikan tutorial dari Michael Hartl. Rekomendasi banget deh buat yang ingin belajar.

Pertama, tentu saya harus tahu dulu ada berapa sih halte TJ itu. Di laman wikipedia Indonesia ini ada jawabannya. Tapi berhubung saya malas input satu persatu, akhirnya saya copas html tabel-nya, buka di excel, bersihkan, dan save-as csv. Nah, cara membaca file csv inilah yang ingin saya share di sini.

1. Taruh file csv di direktori seeds, misal:

db/seeds/kor1.csv

2.  Di dalam file db/seeds.rb , masukkan

require 'csv'

filename = "db/seeds/kor1.csv"

CSV.foreach(filename, :headers => true) do |row|
	Halte.create!(row.to_hash)
end

3. Untuk mengisi database, tinggal menggunakan perintah

rake db:seed

 

Demikian, semoga bermanfaat!

 

Query lebih cepat dengan Adequate Record

Beberapa hari yang lalu, ada teman yang mengupload video ini ke Grup Facebook Rails:

AdequateRecord, apa itu? Karena penasaran, langsung saya googling, dan ketemu websitenya.

Jadi, AdequateRecord adalah semacam ActiveQuery yang menggunakan sistem caching. Gunanya? Supaya lebih cepat dong query-nya. Coba lihat grafik berikut, diambil dari website-nya AdequateRecord

AdequateRecord benchmark

 

Jauh kan bedanya?

Tapi, tidak semua perintah query dapat dicache. Bentuk perintah yang saat ini didukung adalah yang menggunakan find_by seperti

Post.find(id)
Post.find_by_name(name)
Post.find_by(name: name)

karena bentuk perintah seperti itu lebih gampang untuk dicache.

Oh ya, seperti yang bisa dilihat di video, AdequateRecord sekarang sudah dimerge ke master-nya Rails. Jadi mulai sekarang, sebanyak mungkin gunakan bentuk perintah yang didukung AdequateRecord untuk mempercepat kinerja.

Ciao, semoga bermanfaat!

Fitur Upload Gambar dengan Paperclip

Minggu ini saya perlu menambah fitur profile picture untuk user web app saya. Ini baru pertama kali saya kerjakan (maklum nubi), tapi ini kan fungsi yang umum, pasti sudah gem yang praktis untuk fungsi ini.

Yak, browsing sebentar saja langsung ketemu. Gem Paperclip. Gem ini membuat menambahkan attachment gambar ke suatu model menjadi mudah. Cara pakainya ngga ribet, ikuti saja readme di halaman github-nya.

Oh ya, untuk fungsi meresize gambar, paperclip ini membutuhkan software ImageMagick sudah terinstall di sistem kita. Tenang, software ini mudah kok diinstall di Mac atau distro-distro linux populer seperti ubuntu misalnya.

Saya juga berencana menggunakan Amazon S3 untuk storage profile picture saya. Ternyata paperclip sudah support, jadi sepertinya mudah. Sepertinya, soalnya saya belum sempat config di amazon-nya, hehe. Sekarang di server utama saja lah dulu.

Saya masih menghadapi satu kendala nih dalam memakai si paperclip ini. Begini, saya kan menambahkan attachment ‘avatar’ untuk model ‘User’ saya. Untuk pemakaian sih memang tidak ada masalah, tapi semua test rspec yang berkaitan dengan model ‘User’ jadi fail. Errornya begini:

Failure/Error: expect { click_button submit }.to change(User, :count).by(1)
NoMethodError:
undefined method `avatar_content_type' for #

Ada yang tahu problemnya di mana?

Admin Interface untuk Rails

Sebagai developer yang datang dari framework Django, kekurangan Rails dari Django yang langsung terasa adalah tidak adanya fasilitas interface admin dari Rails. Admin interface di sini maksudnya GUI di mana kita bisa mengedit data-data yang ada pada database yang diakses aplikasi kita.

Berhubung saya perlu interface admin untuk aplikasi saya, saya cari-carilah soal admin di Rails. Ternyata ada dua gem yang biasa digunakan: Active Admin dan Rails Admin. Beda utamanya: Rails Admin otomatis mendeteksi struktur model dan menyusun interface adminnya, sementara Active Admin lebih fleksibel tapi harus disusun sendiri.

Sebenarnya membuat interface lewat Active Admin juga ngga susah-susah banget (ada Rail Casts-nya!), tapi berhubung saya perlunya simpel dan pengen langsung pakai saja, akhirnya saya pilih Rails Admin, hehe.

Menginstall Rails Admin itu mudah, tinggal ikuti saja dokumentasi di halaman githubnya. Tetapi ada beberapa gotcha yang saya temukan saat menginstallnya untuk aplikasi saya

  1. Rails Admin (Active Admin juga) menggunakan Devise untuk setup akun administratornya. Ini bisa menimbulkan konflik kalau kita menggunakan sistem otentikasi sendiri. Di kasus saya, saya menggunakan method sign_in saya sendiri, yang bentrok dengan method sign_in nya Devise. Ini lumayan bikin saya garuk-garuk kepala, hehe.
  2. Kalau aplikasi kita memakai gem will_paginate, ia akan konflik dengan gem kaminari yang digunakan Rails Admin. Tenang, ada solusinya.

Setelah ulik-ulik sebentar, berjalanlan Rails Admin dalam aplikasi saya. Buat yang penasaran Rails Admin seperti apa, nih ada live demonya.

Mematikan Server Rails yang Tertinggal

Ada kalanya kita kehilangan akses ke terminal yang menjalankan server development Rails. Akibatnya, kita tidak bisa mematikan server dengan menggunakan Ctrl+C seperti biasanya. Nah, jangan khawatir, kita tetap dapat mematikan server r mudah

Pertama, kita harus cari tahu PID dari server rails. Dengan asumsi server rails berjalan di port 3000 seperti biasanya, gunakan perintah berikut:

$ lsof -wni tcp:3000

Kemudian gunakan perintah di bawah, dengan mengganti PIDnya sesuai PID rails server yang kita dapatkan tadi

$ kill -9 PID

Jreng! Server mati dan port 3000 pun sudah terbebas lagi.

Kembali

Halo semua!

Wah sudah lama ya saya tidak menulis di sini. Harap maklum, saya baru saja melangsungkan salah satu event terpenting dalam hidup saya. Yak, 23 Maret yang lalu saya baru saja melangsungkan pernikahan. Di antara kesibukan mempersiapkan pernikahan sampai pindahan ke kontrakan baru, akhirnya saya tidak sempat menyentuh rails lagi deh.

Sekarang saya sudah mulai settle dengan kehidupan baru, maka saatnya menghidupkan kembali blog ini. Saya berniat memberi konsep baru. Blog ini nantinya tidak melulu memberikan tutorials tentang rails, tapi juga tentang membangun sebuah aplikasi web pada umumnya dan juga ide-ide dan opini saya tentang web development. Semoga masih tetap diterima para pembaca blog ini :D

 

Google+