Laravel 앱의 index.php는 /public 폴더 밑에 있다. 개발할 때 http://localhost:8080을 요청하면 /public/index.php가 가장 먼저 호출이 된다. 하지만, 아파치나 다른 웹서버 설정에 따라 /public이 아닌 /public_html 같은 다른 폴더를 public 폴더로 설정해야할 경우가 있다. 폴더 이름을 public_html으로 바꾸면 되지만, Laravel 앱은 /public에 모든 파일이 존재한다고 가정하므로 설정을 변경해 줘야 한다.
/public을 /public_html로 변경 후 앱을 실행해보자.
$ php artisan serve
그러면 다음과 같은 에러 메세지가 나온다.
at /Users/mdoo/Documents/workspace/demo-project/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php:43
39| * @throws \Exception
40| */
41| public function handle()
42| {
> 43| chdir(public_path());
44|
45| $this->line("Laravel development server started: http://{$this->host()}:{$this->port()}");
46|
47| passthru($this->serverCommand(), $status);
Exception trace:
1 chdir("/Users/username/Documents/workspace/demo-project/public")
/Users/username/Documents/workspace/demo-project/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php:43
2 Illuminate\Foundation\Console\ServeCommand::handle()
/Users/username/Documents/workspace/demo-project/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32
Please use the argument -v to see more details.
ErrorException : chdir(): No such file or directory (errno 2)
public_path() 함수를 사용해서 public 폴더 정보를 가져오는데 기본 경로인 /public 폴더를 반환한다. chdir 명령어로 /public 폴더를 이동하려했으나 폴더가 없으니 에러가 난 것이다. public_path는 path.public 값을 읽어서 경로명을 반환한다. 이 정보를 /app/Providers/AppServiceProvider.php에 설정해 주면 된다.
/app/Providers/AppServiceProvider.php의 register() 함수에 다음 라인을 추가해준다.
$this->app->bind('path.public', function() {
return base_path('public_html');
});
Laravel 패키지를 추가할 경우 package.json도 수정되는 경우가 있다. 예를 들어 laravel/ui 패키지를 추가하면 추가 후 npm install && npm run dev 명령을 추가로 실행하라는 메세지를 볼 수 있다. 이 때 npm run dev는 webpack을 이용해 public 폴더 밑에 app.js, app.scss 파일을 복사해 넣는 일을 한다. 따라서 /webpack.mix.js가 존대한다면 이 부분도 수정해 줘야 한다. 만약 없다면 아래 작업은 안해도 된다.
/webpack.mix.js을 열어보면 app.js, app.scss 파일을 public/js와 public/css에 복사하도록 설정이 되어있다. 이 부분을 다음과 같이 변경해 주면 된다.
mix.js('resources/js/app.js', './js')
.sass('resources/sass/app.scss', './css')
.setPublicPath('public_html');
그리고 /server.php를 열어서 public으로 되어있는 디렉토리 이름을 public_html로 수정해 주면된다.
if ($uri !== '/' && file_exists(__DIR__.'/public_html'.$uri)) {
return false;
}
require_once __DIR__.'/public_html/index.php';
관련글 목록 |
---|
'개발' 카테고리의 다른 글
zsh 터미널 환경 설정 (0) | 2021.04.03 |
---|---|
Laravel 6.x Passport 적용 (406) | 2019.10.23 |
Laravel 6.x Authentication (407) | 2019.10.17 |
Plex에 Daum Movie Plugin 설치 (0) | 2019.05.15 |
Install Docker on Ubuntu (0) | 2019.04.26 |