簡體   English   中英

無法在無業游民的Nginx中運行php artisan make

[英]Can't run php artisan make in vagrant nginx

我正在使用具有以下依賴項的Vagrant創建開發環境:

  • PHP7;
  • Nginx 1.9;
  • Laravel 5.3。

問題是當我嘗試運行php artisan make:controller Test我收到此消息:

PHP Fatal error:  Uncaught UnexpectedValueException: The stream or file "/vagrant/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /vagrant/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107
Stack trace:
#0 /vagrant/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\Handler\StreamHandler->write(Array)
#1 /vagrant/vendor/monolog/monolog/src/Monolog/Logger.php(337): Monolog\Handler\AbstractProcessingHandler->handle(Array)
#2 /vagrant/vendor/monolog/monolog/src/Monolog/Logger.php(616): Monolog\Logger->addRecord(400, Object(UnexpectedValueException), Array)
#3 /vagrant/vendor/laravel/framework/src/Illuminate/Log/Writer.php(202): Monolog\Logger->error(Object(UnexpectedValueException), Array)
#4 /vagrant/vendor/laravel/framework/src/Illuminate/Log/Writer.php(113): Illuminate\Log\Writer->writeLog('error', Object(UnexpectedValueException), Array)
#5 /vagrant/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(71): Illuminat in /vagrant/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 107
PHP Fatal error:  Uncaught UnexpectedValueException: The stream or file "/vagrant/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /vagrant/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107
Stack trace:
#0 /vagrant/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\Handler\StreamHandler->write(Array)
#1 /vagrant/vendor/monolog/monolog/src/Monolog/Logger.php(337): Monolog\Handler\AbstractProcessingHandler->handle(Array)
#2 /vagrant/vendor/monolog/monolog/src/Monolog/Logger.php(616): Monolog\Logger->addRecord(400, Object(Symfony\Component\Debug\Exception\FatalErrorException), Array)
#3 /vagrant/vendor/laravel/framework/src/Illuminate/Log/Writer.php(202): Monolog\Logger->error(Object(Symfony\Component\Debug\Exception\FatalErrorException), Array)
#4 /vagrant/vendor/laravel/framework/src/Illuminate/Log/Writer.php(113): Illuminate\Log\Writer->writeLog('error', Object(Symfony\Component\Debug\Exception\FatalErrorException), Array)
#5 /vagrant/v in /vagrant/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 107

描述我的環境

我的Laravel項目位於var/www的根目錄,我運行以下命令來更改文件夾權限:

chown -R www-data:www-data /var/www
chmod -R 775 /var/www/storage

/ etc / nginx / sites-enabled / default

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/public;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name advodocs.local.com;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}

流浪文件

Vagrant.configure("2") do |config|

    # Customiza propriedades do Vagrant
    config.vm.provider :virtualbox do |vb|
        vb.customize ["modifyvm", :id, "--memory", 2524]
        vb.customize ["modifyvm", :id, "--cpus", 1]
    end

    # Escolhe a box
    config.vm.box = 'ubuntu/trusty64'

    # Configura port forwarding
    config.vm.network :forwarded_port, guest: 80, host: 8080, auto_correct: true
    config.vm.network :private_network, ip: "192.168.68.20"

    #Inicia o provisionamento
    config.vm.provision :shell, :path => "provision/init.sh"
    config.vm.provision :shell, :path => "provision/php.sh"
    config.vm.provision :shell, :path => "provision/postgres.sh"
    config.vm.provision :shell, :path => "provision/nginx.sh"
    config.vm.provision :shell, :path => "provision/node.sh"
    config.vm.provision :shell, :path => "provision/git.sh"

    #Muda o dono de algumas pastas
    config.vm.synced_folder "./", "/vagrant",
    owner: "www-data", group: "www-data"

    config.vm.synced_folder "./", "/var/www",
    owner: "www-data", group: "www-data"

end

Obs:Laravel項目位於/ var / www的根目錄

倉庫鏈接在這里

由於您正在運行Artisan命令來制作控制器,因此該命令正嘗試通過ubuntu用戶創建控制器文件,但您的ubuntu用戶沒有對應用程序文件夾的寫許可權以創建控制器。

假設您的ubuntu用戶是allan,請執行以下操作來解決此問題:

  1. chown -R allan:allan /var/www
  2. chown -R allan:www-data /var/www/storage
  3. chmod -R 775 /var/www/storage
  4. chown -R allan:www-data /var/www/bootstrap/cache
  5. chmod -R 775 /var/www/bootstrap/cache

現在運行您的工匠命令。 它應該工作。 如果沒有,只需檢查/vagrant/storage/logs/laravel.log文件並發布錯誤

另外,一種快速而又骯臟的方式(我不推薦)是,您可以像這樣通過www-data用戶運行命令: sudo su -s /bin/bash www-data ,然后運行Artisan命令

我只是將config.vm.synced_folder更改為:

config.vm.synced_folder "./", "/vagrant",
    owner: "vagrant", group: "www-data", mount_options: ["dmode=775,fmode=664"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM