Rilis Rails 7.1
(github.com/rails)- Saat menggunakan
config.load_defaults 7.1, serialisasi defaultActiveSupport::MessageVerifierdanActiveSupport::MessageEncryptorberubah dari Marshal keActiveSupport::JSON, dan pesan Marshal lama tetap dapat dibaca ActiveRecord::Base.serializediubah agar secara default tidak menggunakan YAML, dan nilai default lama dapat dipulihkan denganconfig.active_record.default_column_serializer = YAML- Format cache
7.1baru ditambahkan dan digunakan sebagai nilai default untuk aplikasi baru, sementara aplikasi lama dapat mengaktifkannya denganconfig.load_defaults 7.1atauconfig.active_support.cache_format_version = 7.1- Entri yang ditulis dengan format cache
6.1atau7.0dapat dibaca dalam format7.1 - Dalam rolling deployment Rails 7.1, format cache harus dipertahankan pada deployment pertama, lalu format cache
7.1diaktifkan pada deployment berikutnya
- Entri yang ditulis dengan format cache
- Serialisasi
:message_packdan:message_pack_allow_marshalditambahkan keMessageEncryptor,MessageVerifier, danconfig.active_support.message_serializer, serta memerlukan gemmsgpack>= 1.7.0 inspectpadaActiveSupport::KeyGenerator,MessageEncryptor,EncryptedConfiguration, dan objek enkripsi Active Record kini mencegah kebocoran nilai rahasia, serta perlindungan XSS padaActionView::HelpersdanERB::Utildiperkuathas_secure_passwordkini menambahkan validasipassword_challengedan metode#{attribute}_salt, danauthenticate_byditambahkan untuk mengurangi serangan enumerasi berbasis timing berdasarkan ada atau tidaknya akun- Dukungan terkait composite primary key dan composite foreign key di Active Record diperluas, termasuk dukungan sintaks tuple
where, pengurutan batch dengan composite key, dan inferensi composite primary key dari skema - Dukungan PostgreSQL ditambah dengan perintah migrasi untuk mengganti nama enum, menambah nilai enum, mengubah nilai enum, exclusion constraint, unique constraint, opsi indeks
INCLUDE, dan dukungan indeksNULLS [NOT] DISTINCT - Adapter SQLite3 mencatat peningkatan performa rata-rata 2× berkat pengaturan Write-Ahead-Log normal syncing mode, capped journal size, shared memory buffer, dan shared cache, serta strict strings mode yang menonaktifkan double-quoted string literal kini aktif secara default
- Iterasi batch seluruh tabel di Active Record kini secara default menggunakan range iteration untuk meningkatkan performa, dengan hasil uji PostgreSQL 10 juta record: querying
253s→30s, updating288s→124s, deleting268s→83s - Connection pooling pada
MemCacheStoredanRedisCacheStorekini aktif secara default, dan untuk menonaktifkannya perlu menetapkanpool: falsepada konfigurasi cache store - Adapter untuk klien database
Trilogyditambahkan sehinggaadapter: trilogyatauDATABASE_URLberformattrilogy://dapat digunakan - Format tag default
ActiveRecord::QueryLogsdiubah ke format SQLCommenter, dan format lama tetap dapat digunakan denganconfig.active_record.query_log_tags_format = :legacy - Item deprecation dan removal mencakup penggunaan singleton
ActiveSupport::Deprecation,SafeBuffer#clone_empty, argumenrewherepada#merge,deferrable: truepadaadd_foreign_key,TestFixtures#fixture_path, serta pembersihan berbagai pengaturan dan API Active Record yang deprecated ActionView::TestCase.register_parserditambahkan ke pengujian Action View agar parser hasil rendering dapat didaftarkan, dengan parser bawaan:htmldan:json
1 komentar
Komentar di Hacker News
Rails itu luar biasa, dan sekarang lebih baik daripada sebelumnya
Di awal karier, saya terutama memakai Django dan Laravel, lalu kemudian beralih ke pekerjaan frontend yang umum sekarang, dan tahun ini kembali menangani proyek Rails + Hotwire
Saya benar-benar terkejut melihat betapa sederhananya semuanya sekarang, dan sayang sekali kebanyakan orang sudah lupa bahwa sesuatu bisa semudah ini. Menakutkan juga bahwa orang-orang yang masuk ke industri sekarang mungkin tidak pernah mengalami kesederhanaan seperti ini
Kalau belum pernah mencoba Rails, atau berhenti hanya karena mendengar hal seperti “PHP itu jelek / Rails sudah mati / JavaScript itu berantakan”, saya sarankan untuk sejenak mengabaikan omongan orang lain dan mencobanya dengan pikiran terbuka
Mungkin bukan pilihan terbaik untuk lingkungan dengan 1.000 engineer bekerja di repositori yang sama, tetapi untuk tim kecil tidak ada tandingannya dan jauh di depan yang lain. Sejujurnya, Laravel mungkin juga hampir sama bagusnya
Dalam hal kecepatan pengembangan awal, menurut saya Rails selalu menang. Konvensinya sangat rapat dan dirancang dengan baik sehingga hampir tidak ada yang bisa menyamai. Laravel memang mulai mengejar, tetapi menurut saya belum sampai di sana
Namun LiveView lebih mudah diskalakan dalam segala arti. Banyak hal tersedia bawaan seperti autentikasi, akses database, antrean pekerjaan, mailer, alat pengujian lengkap, dan hampir tidak perlu menulis JavaScript langsung, ditambah ada BEAM, virtual machine yang hebat
Setidaknya saya senang semua proyek seperti ini memperjuangkan gagasan “mari mundur selangkah”. Di kantor saya memakai React dan Relay, dan meski sudah lama memakai JavaScript frontend dan merasa cukup mampu, terlalu banyak rintangan yang harus dilewati sampai melelahkan
Karena tidak bisa mendapatkan pekerjaan, saya juga tidak bisa mengumpulkan cukup pengalaman, dan pada akhirnya kalah bersaing dengan para penyihir itu. Lowongan seperti itu kadang tetap terbuka lebih dari 12 bulan
Sebagai gantinya, karena di sanalah ada permintaan, saya ikut menyebarkan lebih banyak JavaScript ke dunia
Secara struktural, saya suka pendekatan ember-data. Banyak hal seperti left join/right join pada dataset yang bisa diotomatisasi, dan ada mock server terintegrasi juga
Namun mungkin karena terlalu bekerja dengan baik, ia tidak terlihat sekeren yang lain
https://emberjs.com/
Saya menaikkan aplikasi Rails 7.0 berisi 13.000 baris ke 7.1, dan selain perbedaan antara 7.0 dan 7.1[0], semuanya berjalan hanya dengan mengubah 1 baris kode konfigurasi test
Dari sisi jalur upgrade yang mudah, menurut saya ini sukses. Sekarang bagian menariknya adalah me-refactor sebagian kode agar memakai fitur baru di 7.1
Kalau tertarik, saya juga sudah menaikkan aplikasi contoh Rails / Docker ke 7.1 https://github.com/nickjj/docker-rails-example
Rails 7.1 memang menyertakan Dockerfile, tetapi masih ada banyak opsi yang bisa ditambahkan, seperti memakai Docker Compose untuk membuat pengalaman yang langsung berjalan di development dan production, serta menyertakan Postgres, Redis, Action Cable, Sidekiq, dan sebagainya
[0]: https://railsdiff.org/7.0.8/7.1.0
Sedang mencoba memindahkan codebase Rails 6 yang cukup besar dan penuh React ke pendekatan “non-” JavaScript baru yang memakai Hotwire. Doakan berhasil
Rails luar biasa kalau tetap mengikuti default-nya, tetapi begitu keluar dari default itu, ia menjadi tanah penuh penderitaan
Untuk merekrut engineer frontend, kumpulan kandidat React beberapa orde lebih besar. Mencari paket JavaScript vanilla untuk tugas umum lalu membungkusnya dengan controller Stimulus juga makin sulit dibanding mencari paket React
Stimulus juga tidak benar-benar menyediakan cara untuk menulis unit test controller. Di React, kita bisa memakai jest dan react-test-renderer seperti biasa
Selain itu, kontroversi Turbo TypeScript baru-baru ini tidak memberi kepercayaan terhadap keberlangsungan jangka panjang ekosistem Hotwire
Kami belum mengambil keputusan. Fakta bahwa Stimulus terasa seperti cara yang sangat ala Rails untuk menulis kode frontend jelas merupakan kelebihan, terutama untuk tim kecil yang sudah akrab dengan Rails
Jika aplikasi cukup sederhana dan cocok dengan cara kerja framework, framework itu hebat. Jika membutuhkan konfigurasi yang lebih kompleks dan fleksibel, sebaiknya melihat library
Sekarang saya melakukan server-side rendering dengan slim, atau membuatnya API-only dan memisahkan frontend
Rails terlalu sering berganti arah untuk JavaScript: CoffeeScript, asset precompile, webpack, dan sebagainya
Sebagai catatan, cara menangani JavaScript aplikasi single-page di Rails 7+ juga jauh lebih masuk akal daripada sebelumnya. Pada dasarnya Anda bisa memakai build tool apa pun yang diinginkan secara terpisah dari aplikasi Rails
Saat pengembangan, Anda memang harus menjalankan sesuatu seperti
yarn build --watchbersamaan denganrails s, tetapi secara pribadi menurut saya itu tidak buruk dan menjadi jauh lebih sederhanaPerusahaan kami membuat software untuk mengotomatiskan upgrade Rails, dan juga menyediakan layanan penuh yang mengerjakan upgrade Rails untuk Anda. Jika tertarik, hubungi steve (at) infield.ai atau buat rencana upgrade Rails gratis di https://app.infield.ai/users/sign_up. Tidak perlu kartu kredit
Untuk detailnya, lihat https://docs.infield.ai/docs/creating-an-upgrade-path
Dalam kasus saya, ini langsung cocok hampir seperti pengganti webpack
Saya menyukai Rails dan sudah memakainya sesekali sejak Rails 2
Ini framework yang sangat bagus, dan bagi orang seperti saya yang kadang perlu menjalankan situs web, ini benar-benar jalur dengan hambatan paling kecil
Namun proses menyiapkan laptop baru agar bisa menjalankan Rails itu menyiksa. Perlu node, lalu berarti perlu npm juga. Karena saya developer backend, saya tidak terlalu tahu cara menyiapkan node atau urutan yang benar
Karena bukan hal yang sering saya lakukan, setiap kali terasa seperti pertarungan. Pada akhirnya memang berhasil, tetapi saya selalu tidak yakin kenapa semuanya akhirnya bisa cocok
Saya berharap ada installer yang memasang semua yang dibutuhkan sekaligus sehingga rails langsung berjalan. Installer rvm menyiapkan rails di atas ruby, tetapi tidak menyiapkan sistem node di bawahnya
https://asdf-vm.com/
Node terutama dikenal sebagai tool frontend dan Rails juga memakainya untuk tujuan itu, tetapi seingat saya Node setidaknya awalnya dibuat untuk membawa runtime JavaScript ke backend
Bahkan tanpa package manager, di Windows itu pada dasarnya hanya node.exe; setahu saya tinggal unduh dan ekstrak npm, lalu masukkan node dan npm ke variabel lingkungan PATH
Dan instalasi node itu cukup mudah. Malah terlalu mudah. Saya berharap jauh lebih sulit dan membutuhkan gelar
JavaScript hanyalah alat seperti yang lain. Suka atau tidak, ini alat yang sangat penting, dan suka atau tidak, akan tetap ada untuk waktu lama
Jika sedikit lebih terbuka dan setidaknya mempelajari dasar-dasarnya, pekerjaan akan menjadi lebih mudah
Saya berharap Rails + HTMX, dengan sedikit JavaScript hanya untuk halaman yang sangat interaktif, kembali bangkit
Memakai Rails bersama Slim/HAML benar-benar menyenangkan. Jika mau, library seperti
ViewComponentsbisa membuat partial rendering lebih mudah. Tambahkan web components, dan Anda bisa membuat halaman yang cukup interaktif; kalau benar-benar perlu di halaman tertentu, React juga bisa dipakaiHATEOAS sangat mengurangi kompleksitas aplikasi. Meski begitu, jika membutuhkan API, merespons MIME type yang berbeda juga sangat mudah, dan jika mau bisa berbagi endpoint yang sama
Berdasarkan pengalaman saya, sebagian besar aplikasi yang memakai React sebenarnya sama sekali tidak membutuhkan React. Mereka memakai React hanya karena beberapa menu popup
Jadi jika mulai bermunculan aplikasi besar tanpa React, atau hanya memakai React sangat sedikit, saya berharap ada orang yang menyadari betapa tidak perlunya kompleksitas aplikasi kita saat ini
Namun saya sudah melihat argumen “semua orang memakai React, jadi kita harus pindah ke React”. Bikin menghela napas
Ya, boleh saja bermimpi
Pengumuman resminya ada di sini: https://rubyonrails.org/2023/10/5/Rails-7-1-0-has-been-released
Ada sedikit lebih banyak detail tingkat tinggi, dan saya menantikan untuk mencoba sebagian perubahan barunya. Terutama metode kueri asinkron baru sepertinya cukup berguna untuk peningkatan performa cepat
Rails di backend belum mendapatkan apresiasi yang semestinya
Namun sisi frontend-nya memang sangat berantakan untuk waktu yang sangat lama
Sekarang bekerja dengan kombinasi Rails 7.1 + Hotwired + Importmaps terasa menyenangkan
Namun kita memang harus menunggu sampai dukungan ES6 dan Import Maps setidaknya cukup baik di browser
Kalau melihat tanggal artikel ini, https://web.dev/import-maps-in-all-modern-browsers/ mengumumkan bahwa importmaps bisa digunakan di semua browser modern pada 28 Maret 2023
Jadi sampai sekarang tidak ada cara untuk menghindari Webpack, Yarn, dan berbagai alat bantu JavaScript lainnya
Sekarang sudah ada importmaps dan dukungan ES6 di browser juga sudah cukup baik, jadi https://caniuse.com/?search=es6, kita bisa memakai JavaScript modern dengan hampir tanpa alat tambahan
Beberapa minggu lalu seorang teman bercanda, “Kalau rilis Rails sudah diumumkan tapi kamu belum mengajukan PR upgrade, apakah itu benar-benar terjadi?”
Nah, sekarang saatnya mengajukan PR. Sekalipun harus ditumpuk di belakang PR 7.0 yang sudah menunggu berbulan-bulan
Dari pengalaman, banyak tim kesulitan membuat codebase yang rapi dengan ActiveRecord
Jangan diserang ya, tapi saya masih memakai Rails 4.2 dan puas dengannya
Ini menyediakan semua yang saya butuhkan untuk pekerjaan SaaS backend tanpa JavaScript atau dengan sedikit JavaScript, baik yang saya kerjakan sendiri maupun untuk perusahaan B2B, dan berjalan juga di VPS spesifikasi rendah
Kalau ada waktu untuk menjawab, saya penasaran kenapa saya harus upgrade
Masalah utama versi lama adalah kerentanan pada gem yang terhubung. Misalnya, nokogiri mungkin tidak bisa dinaikkan tanpa upgrade major Rails
Namun kebanyakan aplikasi, misalnya, tidak melakukan parsing XML yang kompleks, jadi cukup banyak kerentanan tidak relevan. Karena itu perlu sedikit maintenance untuk memastikan aman. Sering juga perlu memasang monkey patch untuk mencegah bug
Dengan upgrade, keamanan membaik dan waktu maintenance berkurang. Namun biaya upgrade yang terus-menerus juga harus dipertimbangkan. Faktor lainnya adalah versi baru bisa mendapat dukungan Ruby yang lebih cepat
Biasanya saat membuat aplikasi Rails saya memakai rilis terbaru, tetapi setelah itu saya tidak menaikkan versi Rails kecuali aplikasinya populer atau sangat tua sampai ada sesuatu yang tidak berjalan di sistem baru