HomesteadでLaravel起動時の「No input file specified.」の対処法

PHP

vagrant up後にLaravelのトップページを開くと「No input file specified.」となってしまう問題について
解決するのに結構はまってしまったので情報共有します。

$ vagrant up

vagrant upで仮想OSを起動後、Laravelのトップページ「homestead.test」を開くと・・・。
ブラウザに表示されたのは

No input file specified.

直訳すると
「入力ファイルが指定されていません」
というエラーとなってしまいました。

エラーのログを確認する

まずはログを確認してエラーの原因を探ってみます。

$ vagrant ssh

vagrant sshでVagrantインスタンスにログインします。

ログイン後、/var/log/nginx/内にあるログの中身を確認します。

vagrant@homestead:~$ vim /var/log/nginx/homestead.test-error.log

※homestead.testの部分は各々の環境ごとで異なります。

2021/01/16 05:04:58 [error] 912#912: *1 FastCGI sent in stderr: 
"Unable to open primary script: /home/vagrant/code/public/index.php (No such file or directory)" 
while reading response header from upstream, client: 192.168.20.1, 
server: homestead.test, request: "GET / HTTP/1.1", 
upstream: "fastcgi://unix:/var/run/php/php7.4-fpm.sock:", 
host: "192.168.20.10"

ログを確認すると、
/home/vagrant/code/public/index.php (No such file or directory)
index.phpが見つかりません。というエラーが出ていました。

ん・・・あれれ。
自分の環境では、
/home/vagrant/code/myapp/public/index.php
というディレクトリ構造でLaravelをインストールしたはずなので
確かにパスがおかしいです。
「myapp」がありません。

Homestead.yamlの設定を再確認する

LaravelプロジェクトのルートパスはHomestead.yamlのsites:で指定しています。
そのパスが間違っている可能性を疑い、
「Homestead.yaml」の設定を見直してみます。

---
ip: "192.168.20.10"
memory: 2048
cpus: 2
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: C:\Users\yoshi\Laravel
      to: /home/vagrant/code
      type: "nfs"

sites:
    - map: homestead.test
      to: /home/vagrant/code/myapp/public ← この部分

databases:
    - homestead

設定はあっていました。
ではなぜ、Homestead.yamlで設定したパスが認識されていないのでしょうか。

Homestead.yamlを編集したら再読込が必要!?

Homestead.yamlでの初期設定は

sites:
    - map: homestead.test
      to: /home/vagrant/code/public

となっていて、環境構築中のどこかのタイミングで

sites:
    - map: homestead.test
      to: /home/vagrant/code/myapp/public

と変更した記憶があります。

てっきり、

$ vagrant up

$ vagrant reload

で、最新のHomestead.yamlが読み込まれると思っていたのですが、
調べると、どうやら上記の起動コマンドでは、再読み込みは行われないらしく。
編集した内容も反映されないようです。

ということで、改めて。
以下を実行すると、Homestead.yamlが再読み込みされます。

$ vagrant up --provision

起動後、homestead.testへアクセスします。

表示されました。

原因が分かったら、こんなことで・・・。と思いますが、
開発にはつきものですね。

コメント

タイトルとURLをコピーしました