- 投稿日:2020-02-05T22:02:17+09:00
Macからwindowsへlaravelを移した際の.env→_envになり505エラー
Macからwindowsへlaravelを移した際、.envファイルが_envになっていたが、.envではないとwebページが505エラーとなるので注意が必要です
.env作成
$ cp .env.example .envでもいいが、シンプルに_env.exampleを複製して.envに名前変更してもOK!
その場合、.envのdatabase名が初期値のままなのでご自身のDBを指定してください。
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel //ここをご自身のDB名に変更 DB_USERNAME=root DB_PASSWORD=.envを作成した状態でページを開いたら鍵が指定されてないと怒られます。
鍵指定
$ php artisan key:generateその後反映をさせます.(どちらでもいいです。)
$ php artisan config:clear $ php artisan config:cache
- 投稿日:2020-02-05T19:31:17+09:00
VirtualBoxを使用したlaravelでweb.phpのルーティング設定が何やっても404になる人
今回、mac使用で環境構築していたが突然故障したのでwindows10に環境を持って行ったらサイト表示が404エラーとなってとても焦ったのでまとめました。
【環境/前提】
・laravel5.8
・php7.3
・virtual boxを使用
・サーバーはphp artisan serveを使ってるのでwebサーバーは使用しておらず
・windows10(MacOSから環境を移動)
・他のルートは表示されるが、いくつか又は特定のルートだけ404表示解決
web.phpの順序がおかしかった。
Route::get('/posts/{post}', 'PostsController@show')->where('post', '[0-9]+'); Route::get('/posts/{ico}', 'PostsController@show')->where('post', '[0-9]+'); //ログイン Route::post('/posts/login_output', 'PostsController@login_out'); Route::post('/posts/login', 'PostsController@login'); //ログアウト Route::get('/posts/logout', 'PostsController@logout'); Route::get('/posts/test', 'PostsController@test'); //CSVダウンロード Route::get('/posts/csv', 'PostsController@csv');上部の上2つのコードのせいで/posts/○○とルート設定してあるものはすべて404エラーでした。
- 投稿日:2020-02-05T18:11:13+09:00
【Laravel】24時間以内に作成されたユーザーの数を集計する【指定範囲のデータ取得】
1日
use DB; DB::table('users') ->orderBy('created_at','desc') ->whereRaw('created_at > NOW() - INTERVAL 1 DAY') ->count()30分
->whereRaw('created_at > NOW() - INTERVAL 30 MIN')リファレンス
この記事が作成されている時点では、以下のリファレンスが用意されていたのですが、バージョンアップで参照できなくなるとおもうので、適宜環境にあったリファレンスを参照してください。
筆者のサーバー環境はMySQL 5.5だったのだけど、実行環境依存だとおもうので、
MIN
とかが使えないバージョンなどもあったりするのだろうか。。。
- 投稿日:2020-02-05T16:26:33+09:00
LaravelでAWS認証エラーが起きる?恐らくそれはconfig_cacheの影響です
約6年ぶりくらいにPHP(初Laravel)を触ってるのですがプチハマりしました。残存cacheの影響でハマるとか、物凄く良くありそうなシチュエーションなのに具体的な解決策を見つけられなかったので書いておきます。
LaravelでAWSソリューションを使ってるとこんなエラーレスポンスにめぐりあうかもしれません。
{ "code": "400", "message": "Client error: `GET http://169.254.xxx.xxx/latest/meta-data/iam/security-credentials/` resulted in a `404 Not Found` response:\n<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\t\"http://www. (truncated...)\n", "exception": "GuzzleHttp\\Exception\\ClientException" }このエラーはAWSの認証情報であるCredentialsが何かダメですよ!という内容です。
いやいや.envにちゃんとAWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEY書いてあるYO!という時には、恐らくconfigファイルがキャッシュされているせいで正常にAWSのCredentialsが読み込めておらずエラーレスポンスになってる事があります。
ちなみに稼働環境でphp artisan config:clear
を叩けば最新の.envを読み込み(キャッシュもします)するので解消すると思います。ただし私の環境ではデプロイにDeployerを使っています。なのでデプロイ時に自動実行してもらう為にtaskへ入れておこうと思ったのですが、どうやら標準のタスクには無いようです。なので自分でdeploy.phpにカスタマイズタスクを記載して呼び出します。
task('artisan:config:clear', function () { run('php {{release_path}}/artisan config:clear'); }); /** * Main task */ desc('Deploy your project'); task('deploy:laravel', [ 'deploy:info', 'deploy:prepare', 'deploy:lock', 'deploy:release', 'deploy:update_code', 'deploy:shared', 'deploy:vendors', 'deploy:writable', 'artisan:storage:link', 'artisan:view:clear', 'artisan:cache:clear', 'artisan:config:cache', 'artisan:optimize', // optimizeで何かやってるらしく、ここに書かないとうまく機能しません(面倒なのでちゃんと調べてない) 'artisan:config:clear', 'deploy:symlink', 'deploy:unlock', 'cleanup', ]);ぶっちゃけconfig:clearタスクは省いても良い気がするのですがオーバーヘッドも対してなさそうなので放置しています。
- 投稿日:2020-02-05T15:20:51+09:00
Apache環境でLaravelの環境構築の時に重要だったコマンド(備忘録)
Apach環境下でLaravelのAPI認証回りの設定を行った
・Passportのインストール
Consoleconposer require laravel/passport
・PassportをLaravelに登録する
Console'providers' => [ : Laravel\Passport\PassportServiceProvider::class, ],・キーの生成とレコード挿入
Consolephp artisan passport:install
・全部のデータベースマイグレーションを最初にロールバックし、それからmigrateコマンドを実行
Consolephp artisan migration:reflesh
・シードの実行
Consolephp artisan db:seed
・「Personal Access Client」の生成
Consolephp artisan passport:client --personal ->クライアント名を入力よく訪れたディレクトリ
・このディレクトリの所有者権限をLaravelアプリの所有者に変更しないと、「Service Unavailable」エラーに陥ってた
Console$ ls -l /run/php-fpm/www.sock #権限の確認 $ chown www:www /run/php-fpm/www.sock #権限の変更・Laravel環境のエラーログを見たい!ここで代替エラーの原因がわかる(かも)
Console#アプリのRootディレクトリにて $ vi storage/logs/laravel・ここでよくApache環境のエラーを確認した
Console$ cd / $ vi /var/log/httpd/error_log参考サイト
- 投稿日:2020-02-05T14:51:50+09:00
Laradockを使用して Laravel の開発環境構築
ディレクトリの作成
mkdir myapp cd myappLaradockの導入
git clone https://github.com/Laradock/laradock.git [名前を指定したい場合は入力]Laradockの
.env
を編集cd laradock cp env-example .env.envを開いて以下の通りに編集する
APP_CODE_PATH_HOST=../
をAPP_CODE_PATH_HOST=../src/
に変更し、保存します。Dockerコンテナの起動 & ビルド
docker-compose up -d nginx mysql // ワークスペースに入る docker-compose exec workspace bashLaravelのコマンドはworkspace内で実行できる
Laravelのインストール
composer create-project --prefer-dist laravel/laravel ./src/.env (変更後)
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secretここで
php artisan migrate
してみるroot@c137d5c70b48:/var/www# php artisan migrate Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = default and table_name = migrations and table_type = 'BASE TABLE')このままだとエラーが発生する
原因:MySQLコンテナに入ってMySQLにログインしてuserの認証方式を変更する必要がある。別タブで
docker-compose exec mysql bash
を実行してMySQLコンテナに入る。mysql -u root -pパスワードは
root
以下のコマンドで認証方式を変更
mysql> ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret'; mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';workspaceコンテナで
php artisan migrate
- 投稿日:2020-02-05T14:33:26+09:00
Apacheでの環境構築におけるいろいろなコマンド
ファイル関連
・ローカル環境からリモート環境へファイル(フォルダ)を転送する
Terminal$ scp -r 送りたいファイル名 root@ホスト名:送りたいリモートのディレクトリ(Ex.)/home/www)・ファイルの所有者権限の確認など
Console$ ls -l 確認したいファイル名・ディレクトリにあるすべてのファイルの権限を確認したいとき
Console確認したいディレクトリに移動ののち $ ll・ファイルの所有者権限の設定など
Console$ chown -R 所有者:グループ所有者 ファイル名-Rを付与することで、ディレクトリ内全体の所有者の設定を変更する
・viでファイルを開いた際に、文字化けしていて、日本語が表示されないとき
Console:set enc=utf-8
・viでログを確認するときに最新のエラーログを確認したいとき
Console:$・Apacheエラーのログを確認する
Console$ cd / $ vi /var/log/httpd/error_logMySQLに関するコマンド
・MySQLでユーザーを作成する際などに、求められるパスワードのセキュリティレベルの設定に関するコマンド
Console-> global validate_password_policy="LOW or MEDIUM or HIGH"・MySQLでパスワードのセキュリティレベル一覧を表示するコマンド
Console-> show global variables like '%validates%';・MySQLのステータス確認
Console$ systemctl status mysqld.service・MySQL ログ
Console$ cd / $ cat /var/log/mysql/mysqld.log・MySQLのユーザー一覧
Console-> SELECT user, host from mysql.user・MySQLのユーザー作成
Console-> create user 'ユーザー名'@'ホスト名' identified by 'パスワード';・MySQLのユーザーの削除
Console-> drop user 'ユーザー名'@'ホスト名';・特定のユーザーにすべての権限を付与
Console-> grant all privileges on データベース名.* to 'ユーザー名'@'ホスト名';・MySQLで行った変更の反映
Console-> FLUSH PRIVILEGES;
- 投稿日:2020-02-05T14:19:57+09:00
【Laravel】ElasticBeanstalkで動いているLaravelのログを簡単にCloudWatch Logsに送る【Tips】
これは何
環境変数を追加するだけで、Elastic Beanstalkで動いているLaravelのログをお手軽にCloudWatch Logsに転送する方法です。
CloudWatch Logsに転送されれば、いちいちeb ssh
でインスタンスにログインしてログを見たりしなくて済みます。どうなる?
ElasticBanstalkがデフォルトでCloudWatchLogsに連携している、
/var/log/httpd/erro_log
にLaravelのログ書き出す様にするやりかた
Laravelが吐き出したログはデフォルトでは
storage/logs/laravel.log
ファイルに書き込まれます。これはlogger.phpで以下の様に設定されているからです。
config/logging.php<?php use Monolog\Handler\StreamHandler; return [ /* |-------------------------------------------------------------------------- | Default Log Channel |-------------------------------------------------------------------------- | | This option defines the default log channel that gets used when writing | messages to the logs. The name specified in this option should match | one of the channels defined in the "channels" configuration array. | */ 'default' => env('LOG_CHANNEL', 'stack'), // 略環境変数の
LOG_CHANNEL
を設定することで、簡単にこれを変更することができます。Elasticbeanstalkのコンソールから以下の様に設定しましょう
LOG_CHANNEL=errorlogこうすると、
/var/log/httpd/error_logにログが書き出されるようになります。
このログファイルは、BeanstalkがデフォルトでCloudwatch ログに転送する様に設定されているので、AWSコンソールの
CloudWatch > ログ > ロググループ > hogehoge_beanstalk_enviroment/var/log/httpd/error_logからログの中身を確認することができます。
もっといいやり方
同僚の @yamotuki さんが書いてました
同じ様にしてlaravel.logをCloudwatch Logsに入れられるはずです。
- 投稿日:2020-02-05T00:17:06+09:00
LaravelアプリをHerokuで公開して動かしたら500エラーが発生
ログの確認
下記コマンドで常にコマンドを吐き出させることができます。
heroku logs --tail
※終了させるには、ctrl+c キー
を押下してください。私の場合、500エラーが出ていることがわかりました。
そこで詳細エラーログを確認しました。詳細エラーログの確認
下記コマンドを使用し、HerokuのAPP_DEBUGをtrueに変更することで、エラー発生時にエラーメッセージが詳細に出力された画面に遷移します。
heroku config:set APP_DEBUG=true
エラーを再現し、エラーメッセージを確認することができました!
新しい項目を追加したのに、migrateを行うのを忘れていました。。。
確認し終えたらfalseに戻してあげましょう。
heroku config:set APP_DEBUG=true
以上、Qiita初投稿でした。
- 投稿日:2020-02-05T00:17:06+09:00
Herokuでのエラーログ確認方法
Herokuでエラー発生
自作のアプリケーションをHerokuにアップし動作確認をしたところエラーが発生しました。
エラーの場合はオリジナルのエラーページに飛ばしていたのでなんのエラーか確認できなかったので、
下記の方法でエラーを確認することができました。ログの確認
下記コマンドで常にコマンドを吐き出させることができます。
heroku logs --tail
※終了させるには、ctrl+c キー
を押下してください。私の場合、500エラーが出ていることがわかりました。
そこで詳細エラーログを確認しました。詳細エラーログの確認
下記コマンドを使用し、HerokuのAPP_DEBUGをtrueに変更することで、エラー発生時にエラーメッセージが詳細に出力された画面に遷移します。
heroku config:set APP_DEBUG=true
エラーを再現し、エラーメッセージを確認することができました!
新しい項目を追加したのに、migrateを行うのを忘れていました。。。
確認し終えたらfalseに戻してあげましょう。
heroku config:set APP_DEBUG=true
以上、Qiita初投稿でした。
編集後記
この記事を公開後同期の @laughingman より便利な機能を紹介してもらいました。
papertrailというアドオンです。
Papertrailを押下すると、管理画面に飛ぶことができます。
エラーが起きたよ!と言われて、自分で再現させずとも管理画面から探しにいくだけで良さそうですね。
[参考]http://vdeep.net/heroku-papertrail