2018年10月12日 星期五

架設 laravel 環境遇到的坑

container php-fpm

  • 打包 composer 和設定 laravel 的開發環境
    (不打包的話在操作 PHP 的時候會遇到 could not find driver 錯誤)
    1.  找個地方建個空資料夾
    2.  建立 Dockerfile
    3.  打包(附範例):
        FROM php:7.2.9-fpm
        RUN docker-php-ext-install -j$(nproc) pdo_mysql
        RUN docker-php-ext-install -j$(nproc) mbstring
        RUN docker-php-ext-install -j$(nproc) tokenizer
        RUN curl -sS https://getcomposer.org/installer | php
        RUN mv composer.phar /usr/local/bin/composer
  • 操作 php artisan db 相關的操作時遇到 Access denied for user 錯誤:
    這個問題的原因來自於你沒有讓你 mysql 的 user 開啟遠端連線的權限
    1.  GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD';
    p.s 1.  USERNAME 是允許登入該資料表的使用者帳號
         2.  IP 是允許連線的 IP 位址, 如果用'%', 會讓所有外來 IP 皆可連線
         3.  PASSWORD 是使用者密碼
  • 操作 composer instsall 時遇到 unable to locate package unzip 錯誤:
    1.  sudo apt-get update
    2.  apt-get upgrade
    3.  sudo apt-get install unzip.
  • 錯誤 Syntax error or access violation: 1071 Specified key was too long; maxkey length is 767 bytes")
    從 5.4 開始 laravel 就把資料庫的預設字符集更改成 utf8mb4,除非你使用 MySQL v5.7.7 或更高的版本才不會出現此錯誤。
    1. 找到 App\Providers\AppServiceProvider 文件
    2. 在函式 boot 裡面加入 Schema::defaultStringLength(191);
  • 架設 API Authentication (Passport) 的時候遇到 Unauthenticated 錯誤:
    (假設你按照 laravel 官方的教學走,然後遇到這個錯誤,這是因為你沒有看完整篇文章,不過煮煮也懂,誰有那個美國時間慢慢讀,而且其實這部份的說明藏的很下面,就是故意要騙你看完整篇的意思... ...)
    1. 打開 App\Http\Kernel.php
    2. 在 $middlewareGroups 裡面加入 \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class