
Rack menyediakan antarmuka minimal, modular, dan mudah beradaptasi untuk mengembangkan aplikasi web di Ruby. Dengan menggabungkan permintaan dan respons HTTP dengan cara yang paling sederhana, ini menyatukan dan menyaring jembatan antara server web, kerangka web, dan aplikasi web ke dalam satu pemanggilan metode.
Detail persisnya dijelaskan dalam Spesifikasi Rak, yang harus dipatuhi oleh semua aplikasi Rak.
| Versi | Mendukung |
|---|---|
| 3.1.x | Perbaikan bug dan patch keamanan. |
| 3.0.x | Patch keamanan saja. |
| 2.2.x | Patch keamanan saja. |
| <= 2.1.x | Akhir dukungan. |
Silakan lihat Kebijakan Keamanan untuk informasi lebih lanjut.
Ini adalah versi terbaru dari Rak. Ini berisi perbaikan bug dan patch keamanan. Silakan periksa Log Perubahan untuk informasi rinci tentang perubahan spesifik.
Versi rak ini berisi perubahan signifikan yang dirinci dalam Panduan Peningkatan. Disarankan untuk meningkatkan ke Rack 3 sesegera mungkin untuk menerima fitur dan patch keamanan terbaru.
Versi Rack ini hanya menerima patch keamanan, dan upaya harus dilakukan untuk berpindah ke Rack 3.
Mulai di Ruby 3.4, ketergantungan base64 tidak lagi menjadi permata default, dan dapat menyebabkan peringatan atau kesalahan tentang hilangnya base64 . Untuk memperbaikinya, tambahkan base64 sebagai ketergantungan pada proyek Anda.
Tambahkan permata rak ke bundel aplikasi Anda, atau ikuti petunjuk yang diberikan oleh kerangka web yang didukung:
# Install it generally:
$ gem install rack
# or, add it to your current application gemfile:
$ bundle add rack Jika Anda memerlukan fitur dari Rack::Session atau bin/rackup harap tambahkan permata tersebut secara terpisah.
$ gem install rack-session rackup Buat file bernama config.ru dengan konten berikut:
run do | env |
[ 200 , { } , [ "Hello World" ] ]
endJalankan ini menggunakan permata rak atau server web lain yang didukung.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello WorldRack didukung oleh berbagai server, termasuk:
Anda perlu membaca dokumentasi server untuk mengetahui fitur dan batasan apa yang mungkin dimilikinya. Secara umum, aplikasi Rack apa pun yang valid akan berjalan sama di semua server ini, tanpa mengubah apa pun.
Rack menyediakan permata terpisah, rackup yang merupakan antarmuka umum untuk menjalankan aplikasi Rack pada server yang didukung, termasuk WEBRick , Puma , Falcon , dan lainnya.
Kerangka kerja ini dan banyak kerangka lainnya mendukung Spesifikasi Rak:
Antara server dan kerangka kerja, Rack dapat disesuaikan dengan kebutuhan aplikasi Anda menggunakan middleware. Rack sendiri dikirimkan dengan middleware berikut:
Rack::CommonLogger untuk membuat file log bergaya Apache.Rack::ConditionalGet untuk mengembalikan respons Tidak Dimodifikasi ketika respons tidak berubah.Rack::Config untuk memodifikasi lingkungan sebelum memproses permintaan.Rack::ContentLength untuk menyetel header content-length berdasarkan ukuran badan.Rack::ContentType untuk menyetel header content-type default untuk respons.Rack::Deflater untuk mengompresi respons dengan gzip.Rack::ETag untuk mengatur header etag pada badan yang dapat di-buffer.Rack::Events untuk memberikan pengait yang mudah ketika permintaan diterima dan ketika tanggapan dikirim.Rack::Files untuk menyajikan file statis.Rack::Head untuk mengembalikan badan kosong untuk permintaan HEAD.Rack::Lint untuk memeriksa kesesuaian dengan Spesifikasi Rak.Rack::Lock untuk membuat serialisasi permintaan menggunakan mutex.Rack::MethodOverride untuk mengubah metode permintaan berdasarkan parameter yang dikirimkan.Rack::Recursive untuk memasukkan data dari jalur lain dalam aplikasi, dan untuk melakukan pengalihan internal.Rack::Reloader untuk memuat ulang file jika sudah dimodifikasi.Rack::Runtime untuk menyertakan header respons dengan waktu yang dibutuhkan untuk memproses permintaan.Rack::Sendfile untuk bekerja dengan server web yang dapat menggunakan penyajian file yang dioptimalkan untuk jalur sistem file.Rack::ShowException untuk menangkap pengecualian yang tidak tertangani dan menyajikannya dengan cara yang baik dan bermanfaat dengan penelusuran balik yang dapat diklik.Rack::ShowStatus untuk menggunakan halaman kesalahan yang bagus untuk respons kesalahan klien yang kosong.Rack::Static untuk penyajian file statis yang lebih dapat dikonfigurasi.Rack::TempfileReaper untuk menghapus file sementara yang dibuat selama permintaan.Semua komponen ini menggunakan antarmuka yang sama, yang dijelaskan secara rinci dalam Spesifikasi Rak. Komponen opsional ini dapat digunakan sesuai keinginan Anda.
Jika Anda ingin mengembangkan di luar kerangka kerja yang ada, mengimplementasikan kerangka kerja Anda sendiri, atau mengembangkan middleware, Rack menyediakan banyak bantuan untuk membuat aplikasi Rack dengan cepat dan tanpa melakukan hal-hal web yang sama di mana-mana:
Rack::Request yang juga menyediakan penguraian string kueri dan penanganan multibagian.Rack::Response untuk kemudahan pembuatan balasan HTTP dan penanganan cookie.Rack::MockRequest dan Rack::MockResponse untuk pengujian aplikasi Rack yang efisien dan cepat tanpa bolak-balik HTTP yang sebenarnya.Rack::Cascade untuk mencoba aplikasi Rack tambahan jika aplikasi mengembalikan respons tidak ditemukan atau metode tidak didukung.Rack::Directory untuk menyajikan file di bawah direktori tertentu, dengan indeks direktori.Rack::MediaType untuk mengurai header tipe konten.Rack::Mime untuk menentukan tipe konten berdasarkan ekstensi file.Rack::RewindableInput untuk membuat objek IO apa pun dapat diputar ulang, menggunakan buffer file sementara.Rack::URLMap untuk merutekan ke beberapa aplikasi dalam proses yang sama. Rack memperlihatkan beberapa parameter konfigurasi untuk mengontrol berbagai fitur implementasi.
param_depth_limit Rack :: Utils . param_depth_limit = 32 # defaultJumlah maksimum penyarangan yang diperbolehkan dalam parameter. Misalnya, jika disetel ke 3, string kueri ini akan diizinkan:
?a[b][c]=d
tetapi string kueri ini tidak diizinkan:
?a[b][c][d]=e
Membatasi kedalaman mencegah kemungkinan tumpukan meluap saat mengurai parameter.
multipart_file_limit Rack :: Utils . multipart_file_limit = 128 # defaultJumlah maksimum bagian dengan nama file yang dapat ditampung oleh permintaan. Menerima terlalu banyak bagian dapat menyebabkan server kehabisan pegangan file.
Standarnya adalah 128, artinya satu permintaan tidak dapat mengunggah lebih dari 128 file sekaligus. Setel ke 0 tanpa batas.
Dapat juga diatur melalui variabel lingkungan RACK_MULTIPART_FILE_LIMIT .
(Ini juga disebut sebagai multipart_part_limit dan RACK_MULTIPART_PART_LIMIT untuk kompatibilitas)
multipart_total_part_limitJumlah total maksimum bagian yang dapat ditampung permintaan jenis apa pun, termasuk bidang formulir file dan non-file.
Standarnya adalah 4096, yang berarti satu permintaan tidak boleh berisi lebih dari 4096 bagian.
Setel ke 0 tanpa batas.
Dapat juga diatur melalui variabel lingkungan RACK_MULTIPART_TOTAL_PART_LIMIT .
Lihat CHANGELOG.md.
Lihat CONTRIBUTING.md untuk detail spesifik tentang cara memberikan kontribusi ke Rack.
Silakan kirim bug, saran, dan perbaikan ke Masalah GitHub.
Silakan periksa Kebijakan Keamanan kami untuk pengungkapan yang bertanggung jawab dan proses pelaporan bug keamanan. Karena penggunaan perpustakaan yang luas, sangat disarankan bagi kami untuk mengatur waktu guna menyediakan patch yang layak pada saat pengungkapan. Bantuan Anda dalam hal ini sangat kami hargai.
rackup Alat yang berguna untuk menjalankan aplikasi Rack dari baris perintah, termasuk Rackup::Server (sebelumnya Rack::Server ) untuk server skrip.
rack-contrib Banyaknya middleware yang berguna menciptakan kebutuhan akan proyek yang mengumpulkan middleware Rack baru. rack-contrib mencakup berbagai komponen tambahan untuk Rack dan mudah untuk menyumbangkan modul baru.
rack-sessionMenyediakan manajemen sesi yang nyaman untuk Rack.
Tim Rack Core, terdiri dari
dan Alumni Rak
ingin mengucapkan terima kasih:
Rack::Deflater .Rack::ContentType .Rack::Response yang lebih baik.Rack::Response .Rack dirilis di bawah Lisensi MIT.