"php" 태그로 연결된 49개 게시물개의 게시물이 있습니다.
모든 태그 보기Laravel 5.5로 업그레이드
Laravel 5.4 에서 5.5 로 업그레이드 후기
업그레이드
공홈을 참조해도 된다.
composer.json
에서 아래 패키지의 버전을 바꿔준다.
dependencies
- laravel/framework: 5.5.*
- phpunit/phpunit: ~6.0
dev-dependencies
- filp/whoops: ~2.0
composer clearcache
composer update
이슈
Session, DB 문제
php artisan cache:clear
const UPDATE_AT 문제
const UPDATED_AT = null;
처럼 timestamps 필드 중 하나를 disable 했을 때 5.5 버전에선 오류가 발생한다.
아래 처럼 모델에 setUpdatedAt
함수를 추가해주면 된다.
<?php
public function setUpdatedAt($value) {
return $this;
}
request has 문제
request->has
와 같은 기능으로 동작하려면 request->filled
로 바꿔줘야한다.
<?php
// 5.5에서는 name 값이 비던 안 비던 true
if ($request->has('name')) {
}
// 이게 구버전 has의 기능과 동일하다.
// name 값이 있을 경우만 true
if ($request->filled('name')) {
}
Laravel - Socialite InvalidStateException
가끔 가다가 인증이 안 되는 경우가 있다.
해결법
stateless
Socialite::driver('인증 타입')->stateless()->user();
로 가져오자.
session 명 변경
config/session.php
의 cookie 값을 변경해준다.
session domain 변경
config/session.php
의 domain 값을 null 에서 내 도메인으로 변경한다.
그리고 아래 두 명령어를 실행해주자.
php artisan cache:clear
composer dump-autoload
여담
socialite 설명에선 나오지 않았지만, Socialite 구문을 try/catch
로 감싸주는게 좋았다.
<?php
try {
$user = Socialite::driver('facebook')->stateless()->user();
} catch (\Exception $e) {
return redirect()->route('login');
}
Laravel Query Logging, 쿼리 로그
Laravel DebugBar 를 이용하는게 편하지만 dump 나 json 리턴시에 DebugBar 가 보이지 않으므로 직접 찍어줘야하는 경우가 많다.
소스
<?php
## DB 파사드를 추가한다.
use DB;
...
public function your_func(Request $request) {
// 로그를 enable 시키고
DB::enableQueryLog();
// 쿼리를 여기에 실행한다.
Member::where('조건', '값')->get();
Product::find(1);
// 쿼리 로그를 찍는다.
$queryLogs = DB::getQueryLog();
dump($queryLogs);
}
결과
배열에 query, bindings (preparedStatement 를 위한 것), time 이 상세하게 나온다.
Laravel 5.5 - Debugbar와 BrowserSync의 충돌 해결
Laravel Mix로 browserSync 옵션을 활성화 시에 Debugbar가 생기지 않는 오류가 발생할 경우 (스크립트 단에서 JSON parse 오류가 발생한다) 다음과 같이 설정해주면 된다.
해결
mix.browserSync({
proxy: {
// artisan serve시의 주소
target: "localhost:8000",
reqHeaders: function () {
// host를 직접 지정해준다.
return {
host: "localhost:3000",
};
},
},
});
Laravel 5.5 - Log Permission 문제
웹 서버의 유저로 로그 파일이 생성되어야 하는데, 어느 순간부터 root:root 권한을 달고 daliy log 가 생성되는 경우가 있다.
여러가지 경우의 수가 있는데, 맞는 조건을 찾아서 Permission 오류가 발생하지 않게 처리해보자.
selinux
storage 에는 쓰기권한이 있어야한다.
chcon -R -t httpd_sys_rw_content_t storage
WebServer user
웹 서버의 유저가 다르게 설정 되어있을 때 권한이 바뀔 수 있다. 서버 설정을 열어서 유저가 제대로 설정되어 있는지 확인해보자.
user nginx;
php-fpm user
php-fpm 에서 설정하는 user 와 group 이 다르게 설정 되어 있을 때 권한이 바뀔 수 있다. php-fpm 설정을 열어 유저가 제대로 설정되어 있는지 확인해보자.
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
log rotate
로그 파일이 너무 커지는 걸 막기위해 log rotate 설정이 되어있다면 권한이 바뀔 수 있다. logrotate 가 cron 에 물려 있는지 설정을 확인해보자.
$ pwd
/etc/logroate.d
$ vi nginx
$ vi php-fpm
cron 사용시
crontab 의 경우 root 유저로 실행이 되면 cron 에서 Laravel 을 호출할 때 log 가 root 권한으로 생성될 수 있다.