Gagal mengupgrade Craft CMS
Saya mencoba memutakhirkan dari 3.3.15 -> 3.5.5 dari panel kontrol.
Saya menjalankannya melalui buruh pelabuhan sehingga yang saya butuhkan hanyalah memperbarui file composer.lock agar memiliki dependensi yang benar dan semuanya akan baik-baik saja saat saya membangun kembali gambar tersebut, tetapi sesuatu yang aneh sedang terjadi.
Setelah memilih peningkatan, ini berjalan selama beberapa menit dan kemudian hanya mendapat kesalahan server internal. Ini mencatat berikut ini:
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "NOTICE: PHP message: PHP Fatal error: Uncaught Error: Class 'Yii' not found in /app/vendor/yiisoft/yii2/validators/IpValidator.php:218"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "Stack trace:"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#0 /app/vendor/yiisoft/yii2/base/BaseObject.php(109): yii\validators\IpValidator->init()"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#1 /app/vendor/yiisoft/yii2/web/Request.php(345): yii\base\BaseObject->__construct()"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#2 /app/vendor/yiisoft/yii2/web/Request.php(1877): yii\web\Request->getIpValidator()"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#3 /app/vendor/yiisoft/yii2/web/Request.php(1859): yii\web\Request->getSecureForwardedHeaderTrustedParts()"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#4 /app/vendor/yiisoft/yii2/web/Request.php(1084): yii\web\Request->getSecureForwardedHeaderTrustedPart('proto')"
craft_1 | 2020/08/21 07:38:50 [error] 139#139: *4 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Class 'Yii' not found in /app/vendor/yiisoft/yii2/validators/IpValidator.php:218
yang agak aneh, mengapa ketergantungan hilang saat meningkatkan seperti ini? Setelah upaya peningkatan ini, instalasi dibiarkan dalam keadaan rusak, memberikan 500 kesalahan (dan kesalahan yang sama, Yii tidak ditemukan) untuk semua permintaan. Mengembalikan file composer.json + composer.lock dan menginstal ulang dependensi akan memulihkan fungsionalitas.
Saya mengalami masalah yang sama ketika mencoba meningkatkan ke 3.4, tetapi menunda peningkatan pada saat itu karena saya memiliki prioritas lain.
Saya dapat menambah, menghapus, dan meningkatkan plugin dari toko tanpa masalah dengan gambar ini. Saya memiliki composer.json dan composer.lock yang dapat ditulis, serta folder vendor, penyimpanan, dan migrasi.
EDIT: Sepertinya perubahan di 3.3.16 menyebabkan ini, peningkatan dari yii ke 2.0.30. Melakukan ini:
bash-4.4# composer require craftcms/cms:3.3.16
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Can only install one of: yiisoft/yii2[2.0.30, 2.0.21].
- Can only install one of: yiisoft/yii2[2.0.30, 2.0.21].
- Can only install one of: yiisoft/yii2[2.0.30, 2.0.21].
- craftcms/cms 3.3.16 requires yiisoft/yii2 ~2.0.30.0 -> satisfiable by yiisoft/yii2[2.0.30].
- Installation request for craftcms/cms 3.3.16 -> satisfiable by craftcms/cms[3.3.16].
- Installation request for yiisoft/yii2 (locked at 2.0.21) -> satisfiable by yiisoft/yii2[2.0.21].
Installation failed, reverting ./composer.json to its original content.
Saya tidak mengerti mengapa ia mengeluh tentang yii2 yang dikunci ke versi itu. Tidak ada di composer.lock yang secara eksplisit menyatakan versi itu, semuanya menggunakan ~ versi.
Tetapi bahkan ketika saya menghapus file kunci, folder vendor, dan menjalankan penginstalan komposer, tampaknya berhasil menginstal 2.0.30 Yii2 tetapi saya masih mendapatkan pesan itu, saya mulai merasa sangat frustrasi dengan komposer ...
EDIT 2: Ini adalah file komposer saya:
{
"repositories": [
{
"type": "artifact",
"url": "composer-artifacts/"
}
],
"require": {
"aws/aws-sdk-php": "^3.112",
"carlcs/craft-redactorcustomstyles": "3.0.2",
"codemix/yii2-streamlog": "^1.2",
"craftcms/aws-s3": "^1.2",
"craftcms/cms": "^3.3.15",
"craftcms/redactor": "2.3.3.2",
"dolphiq/redirect": "1.0.24",
"mmikkel/retcon": "2.0.12",
"thejoshsmith/craft-title-to-sidebar": "1.0.1",
"verbb/super-table": "2.3.3",
"vlucas/phpdotenv": "^3.4.0"
},
"autoload": {
"psr-4": {
"rex\\craft\\modules\\": "modules/"
}
},
"config": {
"sort-packages": true,
"optimize-autoloader": true,
"platform": {
"php": "7.0"
},
"github-oauth": {
"github.com": "xxxxxx"
}
},
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
]
}
}
EDIT 3: Saya menggunakan pengaturan yang sama pada pengaturan 3.5.5 yang benar-benar baru dan melakukan peningkatan ke 3.5.6 tanpa hambatan. Sepertinya ada beberapa masalah dengan 3.3.15 dan peningkatan, atau mungkin beberapa plugin (walaupun saya mencoba menghapusnya dari composer.json dan masih gagal).
EDIT 4: Saya mencoba menjalankan ./craft update alldalam penampung sekarang, dan hasilnya hanya menyatakan:
bash-5.0# ./craft update all
Fetching available updates ... done
Performing 6 updates:
- craft 3.3.15 => 3.5.9
- aws-s3 1.2.5 => 1.2.11
- redactor 2.3.3.2 => 2.4.0
- redactor-custom-styles 3.0.2 => 3.0.4
- redirect 1.0.24 => 1.1.1
- retcon 2.0.12 => 2.2.1
Backup the database? (yes|no) [yes]:no
Skipping database backup.
Performing update with Composer ... error: An error occurred
Output:
<warning>Package "craftcms/vue-asset" listed for update is not installed. Ignoring.</warning>
<warning>Package "danielstjules/stringy" listed for update is not installed. Ignoring.</warning>
<warning>Package "yiisoft/yii2-shell" listed for update is not installed. Ignoring.</warning>
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for carlcs/craft-redactorcustomstyles 3.0.4 -> satisfiable by carlcs/craft-redactorcustomstyles[3.0.4].
- carlcs/craft-redactorcustomstyles 3.0.4 requires craftcms/redactor ^2.7.0 -> satisfiable by craftcms/redactor[2.7.4, 2.7.3, 2.7.2, 2.7.1, 2.7.0] but these conflict with your requirements or minimum-stability.
<warning>Running update with --no-dev does not mean require-dev is ignored, it just means the packages will not be installed. If dev requirements are blocking the update you have to resolve those problems.</warning>
Revert the Composer changes? (yes|no) [yes]:
EDIT 5:
Saya telah menemukan pelakunya, tetapi tidak begitu mengerti mengapa ini berfungsi di beberapa versi tetapi tidak di versi lain.
Di general.php, saya menggunakan yii\web\Requestuntuk mengetahui nama host "lokal"
use yii\web\Request;
$request = new Request; ... '@baseUrlPrefix' => getenv('BASE_URL_PREFIX') ?: $request->getHostInfo(),
saat menyetel alias. Itu gagal karena suatu alasan, pada versi tertentu (dari Yii? Tidak tahu).
Jawaban
Anda tidak dapat membuat yii\web\Requestinstance baru di general.php karena Craft belum sepenuhnya diinisialisasi . Ini berfungsi di versi sebelumnya tetapi tim Craft tampaknya telah mengubah urutan pemuatan.
Anda harus menemukan cara lain untuk menentukan URL dasar situs Anda.
Apakah Anda mencoba menghapus file composer.lock dan direktori vendor lalu melakukan penginstalan komposer baru?