Merhaba arkadaşlar,
Bu yazıda Laravel projelerimizi 5.5 sürümünden 5.6 sürümüne nasıl yükseltebileceğimizi anlatacağım.
Yükseltme işlemine geçmeden önce mevcut kullandığımız paketleri kontrol etmemiz gerekiyor. Kullandığımız paketler eğer 5.6 sürümünü desteklemiyorsa ona göre işlemlerimize yeniden yön vermemiz gerekiyor. Bu durumda birkaç sonuç doğuyor.
- Tüm kullandığımız paketler yükseltmeyi destekliyor.
- Birkaç küçük paket yükseltmeyi desteklemiyor.
- Kendimiz pakete müdahale edip güncelleyebiliriz.
- Desteklemeyen paketler çok önemli değilse veya alternatifi varsa o paketleri kullanmaktan vazgeçebiliriz.
- Kullandığımız paketler projenin omurgasını oluşturduğu için herhangi küçük bir değişiklik projeyi bozacağından veya önemli işlevlerini yapamaz hale geleceğinden eminiz.
2. maddenin ihtimallerine biraz değinmek istiyorum. A şıkkında olduğu gibi eğer paketlere müdahale edip gerekli güncellemeyi yapabilecek yetkinliğe sahipseniz hiç düşünmeden devam edebilirsiniz. Eğer güncellemeyi yapabilecek yetkinliğe sahip değilseniz çalışmayan paketlere alternatif paketler bulup yükseltme sonrasında projenizdeki kodları güncelleyerek versiyon geçişini tamamlamış olabilirsiniz. Ben eskiden alternatif paket bulup ardından projeye müdahale ediyordum ama son 2 yıldır doğrudan paketin kopyasını alarak üzerinde değişiklik yaparak daha az iş yüküyle versiyon geçişi yapar oldum.
1 ve 3. maddeler yoruma kapalı olduğu için onları geçiyorum. Yükseltme işlemi aşağıdaki adımlardan oluşacak.
- composer.json dosyasının içeriği güncellenecek.
- Güncelleme ile gelen yeni dosyalar projeye eklenecek.
1. Composer Dosyasının İçeriği
5.5 sürümündeki composer.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
{ "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "type": "project", "require": { "php": ">=7.0.0", "fideloper/proxy": "~3.3", "laravel/framework": "5.5.*", "laravel/tinker": "~1.0" }, "require-dev": { "filp/whoops": "~2.0", "fzaninotto/faker": "~1.4", "mockery/mockery": "~1.0", "phpunit/phpunit": "~6.0", "symfony/thanks": "^1.0" }, "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" } }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "extra": { "laravel": { "dont-discover": [ ] } }, "scripts": { "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate" ], "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover" ] }, "config": { "preferred-install": "dist", "sort-packages": true, "optimize-autoloader": true } } |
5.6 sürümündeki composer.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
{ "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "type": "project", "require": { "php": ">=7.1.0", "fideloper/proxy": "~4.0", "laravel/framework": "5.6.*", "laravel/tinker": "~1.0" }, "require-dev": { "filp/whoops": "~2.0", "nunomaduro/collision": "~1.1", "fzaninotto/faker": "~1.4", "mockery/mockery": "~1.0", "phpunit/phpunit": "~7.0", "symfony/thanks": "^1.0" }, "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" } }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "extra": { "laravel": { "dont-discover": [ ] } }, "scripts": { "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate" ], "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover" ] }, "config": { "preferred-install": "dist", "sort-packages": true, "optimize-autoloader": true }, "minimum-stability": "dev", "prefer-stable": true } |
2 içerik arasındaki farka baktığımızda require
, require-dev
ve en sonraki minimum-stability
ile prefer-stable
kısımlarında değişiklik olduğunu görüyoruz. Benim makaleyi yazdığım şu sıralarda 5.6 sürümü geliştirme aşamasında olduğu için minimum-stability
ile prefer-stable
satırları görünüyor. Sürüm duyurulduktan sonra bu kısımlar kaldırılacaktır. Bizim odaklanmamız gereken yerler require
ve require-dev
kısımları.
İlk olarak require
kısmındaki değişikliği yapalım.
1 2 3 |
"php": ">=7.0.0", "fideloper/proxy": "~3.3", "laravel/framework": "5.5.*", |
yerine
1 2 3 |
"php": ">=7.1.0", "fideloper/proxy": "~4.0", "laravel/framework": "5.6.*", |
yazıyoruz.
Arından require-dev
kısmındaki değişikliği yapalım.
1 |
"phpunit/phpunit": "~6.0" |
yerine
1 |
"phpunit/phpunit": "~7.0" |
yazıyoruz ve 1 satır da ekleme yapıyoruz.
1 |
"nunomaduro/collision": "~1.1" |
Böylelikle güncel hali aşağıdaki şu şekilde oluyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
"require": { "php": ">=7.1.0", "fideloper/proxy": "~4.0", "laravel/framework": "5.6.*", "laravel/tinker": "~1.0" }, "require-dev": { "filp/whoops": "~2.0", "nunomaduro/collision": "~1.1", "fzaninotto/faker": "~1.4", "mockery/mockery": "~1.0", "phpunit/phpunit": "~7.0", "symfony/thanks": "^1.0" } |
Ben örneği boş bir proje üzerinde yaptığım için başka paketler görmüyorsunuz ama siz kendi projenizi yükseltirken diğer paketlerin güncel versiyonlarını da yazmanız gerekiyor.
2. Eksik Dosyaların Oluşturulması
Laravel 5.6 sürümüyle beraber 2 yeni dosya daha projeye katılmış oldu. Bunlar hashing.php ve logging.php config dosyaları.
Projemizin config/
dizini altında hashing.php
dosyası oluşturuyoruz ve aşağıdaki içeriği ekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php return [ /* |-------------------------------------------------------------------------- | Default Hash Driver |-------------------------------------------------------------------------- | | This option controls the default hash driver that will be used to hash | passwords for your application. By default, the bcrypt algorithm is | used; however, you remain free to modify this option if you wish. | | Supported: "bcrypt", "argon" | */ 'driver' => 'bcrypt', ]; |
Ardından yine config/
dizini altında logging.php
dosyası oluşturuyoruz ve aşağıdaki içeriği ekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
<?php return [ /* |-------------------------------------------------------------------------- | Default Log Channel |-------------------------------------------------------------------------- | | This option defines the default log channel that gets used when writing | messages to the logs. The name specified in this option should match | one of the channels defined in the "channels" configuration array. | */ 'default' => env('LOG_CHANNEL', 'stack'), /* |-------------------------------------------------------------------------- | Log Channels |-------------------------------------------------------------------------- | | Here you may configure the log channels for your application. Out of | the box, Laravel uses the Monolog PHP logging library. This gives | you a variety of powerful log handlers / formatters to utilize. | | Available Drivers: "single", "daily", "slack", "syslog", | "errorlog", "custom", "stack" | */ 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single'], ], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 7, ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => 'critical', ], 'syslog' => [ 'driver' => 'syslog', 'level' => 'debug', ], 'errorlog' => [ 'driver' => 'errorlog', 'level' => 'debug', ], ], ]; |
Böylelikle eksik dosyalarımızı da tamamlamış olduk.
Şimdi son işlem olarak güncelleyip sonucu görelim.
1 |
composer update |
Güncelleme sonrasında projenizde etkilenmesi muhtemel tüm fonksiyonları en az 1 kere test etmenizi öneriyorum. Eğer bir tema paketi kullanıyorsanız belki bazı view dosyalarınız artık derlenmiyor olabilir. Belki de yetkilendirme için kullandığınız pakette sorunlar çıkabilir. Olası birçok ihtimal vardır. En iyisi tüm projeyi genel hatlarıyla kontrol etmek.
Güncelleme işlemi bu kadar. Daha gelişmiş haliyle incelemek isterseniz şu linkten Laravel’in kendi dokümanını okuyabilirsiniz.
Faydalı olması dileğiyle..
Middleware/TrustProxies.php dosyasında şu değişiklik yapılmalı yoksa hata çıkıyor.
protected $headers = [
Request::HEADER_FORWARDED => ‘FORWARDED’,
Request::HEADER_X_FORWARDED_FOR => ‘X_FORWARDED_FOR’,
Request::HEADER_X_FORWARDED_HOST => ‘X_FORWARDED_HOST’,
Request::HEADER_X_FORWARDED_PORT => ‘X_FORWARDED_PORT’,
Request::HEADER_X_FORWARDED_PROTO => ‘X_FORWARDED_PROTO’,
];
to
protected $headers = Request::HEADER_X_FORWARDED_ALL;
Geri dönüşünüz için teşekkür ederim.
Makale için teşekkürler, laravel 5.1 lts den 5.5 lts ye geçiş makalesi de yayınlarsanız çok sevinirim iyi çalışmalar