Seluruh masalah pengaturan server pengembangan untuk aplikasi Ruby on Rails saya membingungkan saya. Ada WEBrick, Mongrel, Passenger, Apache, Nginx dan banyak lagi yang saya yakin, dan saya tidak begitu mengerti peran berbeda yang mereka mainkan.
Saya mulai menggunakan WEBrick, dan sekarang saya menggunakan Mongrel untuk pengembangan. Apakah server ini berdiri sendiri, atau apakah mereka duduk di depan Apache?
Saya telah membaca tentang Penumpang dan saya tidak benar-benar mengerti apa itu, situs tersebut mengatakan "membuat penyebaran aplikasi web Ruby menjadi mudah", apakah ini menggantikan Mongrel? Apakah itu seperti Capistrano, yang juga menyebarkan aplikasi web?
Mengingat saya ingin menguji SSL, dan saya percaya itu tidak didukung oleh mongrel, apa pengaturan server pengembangan terbaik?
Terima kasih
Jawaban:
Kata "penyebaran" dapat memiliki dua arti tergantung pada konteksnya. Anda juga membingungkan peran Apache / Nginx dengan peran komponen lainnya.
Catatan bersejarah: Artikel ini awalnya ditulis pada 6 November 2010, ketika ekosistem server aplikasi Ruby terbatas. Saya telah memperbarui artikel ini pada 15 Maret 2013 dengan semua pembaruan terbaru di ekosistem.
Penafian : Saya adalah salah satu penulis Phusion Passenger, salah satu server aplikasi.
Apache vs Nginx
Keduanya adalah server web. Mereka dapat menyajikan file statis tetapi - dengan modul yang tepat - juga dapat melayani aplikasi web yang dinamis misalnya yang ditulis dalam PHP. Apache lebih populer dan memiliki lebih banyak fitur, Nginx lebih kecil dan lebih cepat dan memiliki lebih sedikit fitur.
Baik Apache maupun Nginx tidak dapat menyajikan aplikasi web Ruby di luar kotak, untuk melakukan itu Anda perlu menggunakan Apache / Nginx dalam kombinasi dengan beberapa jenis add-on, dijelaskan nanti.
Apache dan Nginx juga dapat bertindak sebagai proksi terbalik, artinya mereka dapat mengambil permintaan HTTP yang masuk dan meneruskannya ke server lain, yang juga berbicara HTTP. Ketika server itu merespons dengan respons HTTP, Apache / Nginx akan meneruskan respons kembali ke klien; Anda akan belajar nanti mengapa ini relevan.
Mongrel dan server aplikasi produksi lainnya vs WEBrick
Mongrel adalah "server aplikasi" Ruby: Secara konkret ini berarti bahwa Mongrel adalah aplikasi yang:
Namun Mongrel cukup tanggal, saat ini tidak lagi dipertahankan. Server aplikasi alternatif yang lebih baru adalah:
Saya akan membahasnya nanti dan menjelaskan bagaimana mereka berbeda satu sama lain dan dari Mongrel.
WEBrick melakukan hal yang sama dengan Mongrel, tetapi perbedaannya adalah:
Server aplikasi dan dunia
Semua server aplikasi Ruby saat ini berbicara HTTP, namun beberapa server aplikasi mungkin langsung terpapar ke Internet pada port 80, sementara yang lain mungkin tidak.
Mengapa beberapa server aplikasi harus diletakkan di belakang proxy terbalik?
Mengapa beberapa server aplikasi dapat langsung terpapar ke Internet?
Server aplikasi dibandingkan
Di bagian ini saya akan membandingkan sebagian besar server aplikasi yang saya sebutkan, tetapi bukan Penumpang Phusion. Penumpang Phusion adalah binatang yang sangat berbeda dari yang lain sehingga saya telah memberikannya bagian khusus. Saya juga telah menghapus Trinidad dan TorqueBox karena saya tidak mengenal mereka dengan cukup baik, tetapi mereka tetap relevan jika Anda menggunakan JRuby.
Penumpang Phusion
Penumpang Phusion bekerja sangat berbeda dari yang lainnya. Penumpang Phusion terintegrasi langsung ke Apache atau Nginx, dan dengan demikian dapat dibandingkan dengan mod_php untuk Apache. Sama seperti mod_php memungkinkan Apache untuk melayani aplikasi PHP, hampir secara ajaib, Penumpang Phusion memungkinkan Apache (dan juga Nginx!) Untuk melayani aplikasi Ruby, hampir secara ajaib. Tujuan Penumpang Phusion adalah untuk menjadikan semuanya Just Work (tm) dengan sesedikit mungkin kesulitan.
Alih-alih memulai proses atau cluster untuk aplikasi Anda, dan mengonfigurasi Apache / Nginx untuk menyajikan file statis dan / atau membalikkan permintaan proxy ke proses / cluster dengan Phusion Passenger, Anda hanya perlu:
Semua konfigurasi dilakukan dalam file konfigurasi server web. Phusion Passenger mengotomatiskan segalanya. Tidak perlu memulai cluster dan mengelola proses. Memulai / menghentikan proses, memulai kembali ketika mereka crash, dll - semua otomatis. Dibandingkan dengan server aplikasi lain, Penumpang Phusion memiliki bagian bergerak yang jauh lebih sedikit. Kemudahan penggunaan ini adalah salah satu alasan utama mengapa orang menggunakan Penumpang Phusion.
Juga tidak seperti server aplikasi lain, Penumpang Phusion terutama ditulis dalam C ++, membuatnya sangat cepat.
Ada juga varian Enterprise dari Phusion Passenger dengan lebih banyak fitur, seperti rolling restart otomatis, dukungan multithreading, resistansi penyebaran kesalahan, dll.
Untuk alasan di atas, Phusion Passenger saat ini adalah server aplikasi Ruby paling populer, memberi daya lebih dari 150.000 situs web, termasuk yang besar seperti New York Times, Pixar, Airbnb, dll.
Penumpang Phusion vs server aplikasi lain
Phusion Passenger menyediakan lebih banyak fitur dan memberikan banyak keunggulan dibandingkan server aplikasi lain, seperti:
Beban kerja yang tidak bagus di Unicorn adalah:
Model I / O hybrid di Phusion Passenger Enterprise 4 atau lebih baru membuatnya menjadi pilihan yang sangat baik untuk jenis beban kerja ini.
Ada lebih banyak fitur dan kelebihan, tetapi daftarnya sangat panjang. Anda harus merujuk ke manual Penumpang Phusion yang komprehensif ( versi Apache , versi Nginx ) atau situs web Penumpang Phusion untuk informasi.
Model konkurensi I / O
Sebuah artikel baru-baru ini diposting di blog Phusion tentang penyetelan jumlah proses dan utas secara optimal karena beban kerja Anda. Lihat pengaturan konkurensi Penumpang Phusion Penumpang .
Capistrano
Capistrano adalah sesuatu yang sangat berbeda. Di semua bagian sebelumnya, "penyebaran" mengacu pada tindakan memulai aplikasi Ruby Anda di server aplikasi, sehingga aplikasi itu dapat diakses oleh pengunjung, tetapi sebelum itu bisa terjadi, biasanya seseorang perlu melakukan beberapa pekerjaan persiapan, seperti:
Dalam konteks Capistrano, "penyebaran" mengacu pada melakukan semua pekerjaan persiapan ini. Capistrano bukan server aplikasi. Sebaliknya, ini adalah alat untuk mengotomatiskan semua pekerjaan persiapan itu. Anda memberi tahu Capistrano di mana server Anda berada dan perintah mana yang harus dijalankan setiap kali Anda menggunakan versi baru aplikasi Anda, dan Capistrano akan mengunggah mengunggah aplikasi Rails ke server untuk Anda dan menjalankan perintah yang Anda tentukan.
Capistrano selalu digunakan dalam kombinasi dengan server aplikasi. Itu tidak menggantikan server aplikasi. Demikian pula sebaliknya, server aplikasi tidak menggantikan Capistrano, mereka dapat digunakan dalam kombinasi dengan Capistrano.
Tentu saja Anda tidak harus menggunakan Capistrano. Jika Anda lebih suka mengunggah aplikasi Ruby Anda dengan FTP dan secara manual menjalankan langkah-langkah perintah yang sama setiap kali, maka Anda bisa melakukannya. Orang lain sudah bosan, jadi mereka mengotomatiskan langkah-langkah itu di Capistrano.
sumber