Berita Pasukan Lucee MY

Lucee 8.0: apa yang berubah dan apa yang perlu diuji

Lucee 8.0 kini release candidate, bukan beta. Ketahui perubahan yang mematahkan kod, apa yang perlu diuji, dan cara uji di slot ujian sebelum naik taraf.

Lucee 8.0: apa yang berubah dan apa yang perlu diuji
0
Kandungan

Lucee 8.0: apa yang berubah dan apa yang perlu diuji

Lucee 8.0 ialah keluaran utama seterusnya selepas siri 7.x, dan pada masa penulisan ia berada dalam status release candidate, bukan lagi beta tetapi juga belum keluaran penuh. Versi terkini ialah 8.0.0.186 RC, selepas dua beta 8.0.0.126 dan 8.0.0.172. Artikel ini meringkaskan apa yang berubah berdasarkan dokumentasi rasmi, dan perkara yang perlu anda uji sebelum menaik taraf.

Status semasa: RC, bukan beta, belum keluaran penuh

Di laman muat turun Lucee, barisan 8.0 diletakkan di bawah label EDGE, dengan 8.0.0.186 berstatus Release Candidate dan 8.0.0.172 serta 8.0.0.126 berstatus Beta. Release candidate bermaksud pasukan percaya versi ini hampir siap dan meminta komuniti mengujinya secara meluas, tetapi ia belum dijamin sebagai keluaran penuh dan butiran masih boleh berubah.

Jadi jangan letakkan 8.0 pada pelayan pengeluaran utama anda dahulu. Gunakannya di persekitaran ujian untuk mengenal pasti masalah lebih awal, supaya apabila keluaran penuh tiba, anda sudah bersedia. Ini selari dengan amalan naik taraf 7.1 ke 8.0 yang kami gariskan secara berasingan.

Keluaran besar seperti 8.0 biasanya membawa perubahan arkitekstur yang mendalam, bukan sekadar fungsi baharu. Dalam kes 8.0, dua perubahan besar ialah penulisan semula cara konfigurasi dimuatkan dan penggunaan benang maya Java secara lalai untuk fungsi lelaran selari. Perubahan sebegini menyentuh banyak aplikasi secara tidak langsung, walaupun kod CFML anda sendiri tidak berubah langsung.

Dokumentasi rasmi menyediakan dua halaman penting untuk 8.0: Breaking Changes between Lucee 7.1 and 8.0, dan Upgrade Lucee 7.1 to 8.0: Checklist for AI Coding Agents. Kedua-duanya menjadi asas artikel ini, dan saya hanya menulis perkara yang disahkan daripada sumber tersebut.

Java 21: keperluan paling asas

Perubahan paling keras dalam 8.0 ialah keperluan Java. Lucee 7.1 memerlukan minimum Java 11, tetapi 8.0 dikompil untuk Java 21 dan bundle OSGi-nya mengisytiharkan JavaSE-21, jadi ia tidak akan mula pada Java 11 atau 17. Ini ialah penyekat, bukan amaran.

Jika anda menjalankan 7.1 di atas Java 17 atau 21, anda perlu memastikan JVM anda ialah Java 21 atau lebih baharu sebelum menaik taraf. Bagi pengguna Docker, ini bermakna menukar imej asas daripada contohnya eclipse-temurin:17-jre kepada eclipse-temurin:21-jre. Butiran penuh ada dalam Java 25 dan Lucee.

Perubahan konfigurasi yang senyap

Perubahan paling berbahaya dalam 8.0 ialah perubahan konfigurasi yang senyap, iaitu yang tidak menghasilkan ralat tetapi mengubah tingkah laku. Dalam 7.1, beberapa tetapan dibaca di peringkat atas fail .CFConfig.json, contohnya debuggingTemplate, showDebug, cacheDefaultQuery, dan updateProxyHost. Dalam 8.0, tetapan ini hanya dibaca di dalam seksyen masing-masing: monitoring, cache, dan proxy.

Jika anda meninggalkan kunci lama di peringkat atas, Lucee 8.0 mengabaikannya tanpa sebarang ralat atau amaran dan menggunakan nilai lalai. Maknanya, pilihan nyahpepijat yang anda hidupkan dalam 7.1 akan tiba-tiba mati selepas naik taraf, tanpa sebarang tanda dalam log. Ini sebabnya langkah semakan konfigurasi menjadi wajib sebelum naik taraf.

Benang maya untuk lelaran selari

Dalam 7.1, fungsi lelaran seperti arrayEach, structEach, dan queryEach yang dipanggil dengan parallel=true menggunakan paling banyak 20 benang platform. Dalam 8.0 di atas Java 21, parallel=true berjalan di atas benang maya tanpa had konkurensi secara lalai.

Ini bagus untuk beban yang ringan, tetapi berbahaya jika closure anda menggunakan sumber terhad seperti sambungan pangkalan data atau panggilan HTTP ke perkhidmatan yang dihadkan kadar. Tanpa had, anda boleh membanjiri sumber tersebut. Penyelesaiannya ialah lulus parallel="thread" dan tetapkan maxConcurrency secara eksplisit, atau matikan benang maya secara menyeluruh dengan LUCEE_ALLOW_VIRTUAL_THREADS=false.

Susunan kunci scope tidak lagi teratur

Satu lagi perubahan senyap melibatkan scope application, server, dan sesi JEE. Dalam 8.0, scope ini disokong oleh concurrent map dan tidak lagi mengekalkan susunan sisipan, demi mengurangkan perebutan kunci di bawah beban. Kod yang melingkar ke atas scope ini atau membandingkan output bersiri akan melihat susunan kunci yang berubah.

Ini ialah corak yang sama dengan perubahan susunan kunci struct antara 7.0 dan 7.1 yang pernah mematahkan banyak aplikasi. Pengajarannya konsisten: jangan bergantung pada susunan kunci. Jika susunan penting, salin ke structNew("ordered") dahulu atau susun kunci secara manual.

Enjin PDF baharu

Lucee 8.0 membundel sambungan PDF versi 3.0, menggantikan enjin rendering. Tag cfdocument kini menggunakan OpenHTMLToPDF, manakala cpdf menggunakan PDFBox 3. Enjin PD4ML atau mod "classic" telah dibuang, dan atribut type pada cfdocument serta tetapan this.pdf.type kini diabaikan sepenuhnya.

Aplikasi yang menjana PDF, terutamanya yang bergantung pada susun atur tepat, mesti menjana semula dokumen penting dan membandingkannya dengan output 7.1, dari segi pemisah halaman, fon, CSS, dan pengepala serta pengaki. Anda juga boleh membuang type="classic" kerana ia tidak lagi berfungsi.

Markdown dan SMB berpindah ke sambungan

MarkdownToHTML() dan pembekal sumber smb:// telah dipindahkan keluar daripada teras ke sambungan. Lucee 8.0 membundel kedua-dua sambungan ini, jadi kod anda terus berfungsi tanpa perubahan untuk kebanyakan pemasangan. Pengecualian ialah persediaan yang mengawal sambungan secara eksplisit, contohnya dengan lucee.extensions.install=false atau lucee.extensions.config.only=true, yang perlu menambah sambungan tersebut secara manual ke senarai mereka.

Ini meneruskan corak yang bermula dalam 7.1 apabila Mail, FTP, dan Compress dipindahkan ke sambungan. Kesan praktikalnya ialah kini anda boleh mengemas kini sambungan ini secara berasingan daripada teras Lucee.

Jadual jenis perubahan yang sering mematahkan kod

Untuk memudahkan semakan, berikut ialah kategori perubahan 8.0 yang paling kerap mematahkan kod sedia ada:

Jenis perubahanContoh dalam 8.0Kesan tanpa tindakan
Konfigurasi senyapKunci debugging di peringkat atas diabaikanPilihan nyahpepijat mati tanpa amaran
Susunan kunciScope application dan server guna concurrent mapOutput bersiri berubah susunan
Keperluan runtimeJava 21 minimumPelayan tidak mula pada Java 11 atau 17
Enjin renderingPDF guna OpenHTMLToPDF, PD4ML dibuangReka letak PDF berubah
API ditukar namaArgumen Administrator.cfc dan cfadminSkrip automasi senyap menyimpan nilai lalai

Perkara yang perlu diuji sebelum naik taraf

Senarai semak ujian anda harus merangkumi sekurang-kurangnya lima perkara. Pertama, uji boot pelayan pada Java 21 dan pastikan ia mula tanpa ralat konfigurasi. Kedua, jalankan semula suite ujian aplikasi anda dan bandingkan hasilnya. Ketiga, uji laluan kod selari dan jana semula PDF penting. Keempat, semak skrip automasi pentadbir kerana banyak argumen Administrator.cfc telah ditukar nama. Kelima, semak log pelayan untuk ralat sambungan atau muat turun Maven yang gagal.

Untuk semakan konfigurasi, hidupkan LUCEE_CONFIG_VALIDATE=true semasa boot pertama supaya Lucee memuatkan setiap tetapan ketika mula dan bukannya ketika pertama kali digunakan. Ini mendedahkan nilai tidak sah dengan segera, kerana dalam 8.0 nilai yang tidak boleh dihuraikan tidak lagi diabaikan secara senyap seperti dalam 7.1.

Cara menguji di slot ujian

Slot ujian bermaksud persekitaran berasingan yang meniru pengeluaran tetapi tidak melayan trafik sebenar. Cara paling bersih ialah menaikkan bekas Docker dengan imej 8.0 RC, menyalin konfigurasi dan kod anda, dan menjalankan ujian di sana. Panduan deploy Lucee dengan Docker menerangkan cara menyediakan ini.

Sebelum memulakan, pastikan anda mempunyai sandaran kod, pangkalan data, dan konfigurasi yang lengkap, dan pantau log dan pemantauan sepanjang ujian. Uji laluan kritikal aplikasi secara manual selain daripada ujian automatik, kerana perubahan senyap seperti susunan kunci tidak selalu ditangkap oleh suite ujian biasa.

Soalan Lazim (FAQ)

Adakah Lucee 8.0 sudah boleh digunakan dalam pengeluaran?

Belum. Pada masa penulisan, 8.0 berada dalam status release candidate di bawah label EDGE. Gunakannya di persekitaran ujian, bukan pelayan pengeluaran utama.

Apakah keperluan Java minimum untuk Lucee 8.0?

Java 21 atau lebih baharu. Lucee 8.0 tidak akan mula pada Java 11 atau 17.

Adakah saya perlu menulis semula kod CFML untuk 8.0?

Kebanyakan kod tidak perlu ditulis semula. Tetapi anda perlu menyemak perkara yang bergantung pada susunan kunci, fungsi selari, penjanaan PDF, dan skrip automasi pentadbir.

Adakah perubahan konfigurasi menghasilkan ralat?

Tidak, dan itu bahayanya. Kunci konfigurasi yang ditinggalkan di peringkat atas diabaikan tanpa amaran, jadi tetapan anda boleh berubah secara senyap. Gunakan LUCEE_CONFIG_VALIDATE=true untuk mendedahkan masalah.

Adakah MarkdownToHTML() masih berfungsi?

Ya, dalam kebanyakan pemasangan. Ia kini datang daripada sambungan yang dibundel. Hanya persediaan yang mengawal sambungan secara eksplisit perlu menambahnya ke senarai secara manual.

Sumber

0 komen

Log masuk untuk menjawab atau memberi komen.

Log masuk