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" ] ]
end
Jalankan ini menggunakan permata rak atau server web lain yang didukung.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello World
Rack 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 # default
Jumlah 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 # default
Jumlah 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_limit
Jumlah 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-session
Menyediakan 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.