20200205のlaravelに関する記事は10件です。

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を作成した状態でページを開いたら鍵が指定されてないと怒られます。
キー.png

鍵指定

$ php artisan key:generate

その後反映をさせます.(どちらでもいいです。)

$ php artisan config:clear
$ php artisan config:cache
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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エラーでした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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')

リファレンス

この記事が作成されている時点では、以下のリファレンスが用意されていたのですが、バージョンアップで参照できなくなるとおもうので、適宜環境にあったリファレンスを参照してください。

image.png

筆者のサーバー環境はMySQL 5.5だったのだけど、実行環境依存だとおもうので、MINとかが使えないバージョンなどもあったりするのだろうか。。。 :thinking:

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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タスクは省いても良い気がするのですがオーバーヘッドも対してなさそうなので放置しています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Apache環境でLaravelの環境構築の時に重要だったコマンド(備忘録)

Apach環境下でLaravelのAPI認証回りの設定を行った

・Passportのインストール

Console
conposer require laravel/passport

・PassportをLaravelに登録する

Console
'providers' => [
                  :
        Laravel\Passport\PassportServiceProvider::class,
    ],

・キーの生成とレコード挿入

Console
php artisan passport:install

・全部のデータベースマイグレーションを最初にロールバックし、それからmigrateコマンドを実行

Console
php artisan migration:reflesh

・シードの実行

Console
php artisan db:seed

・「Personal Access Client」の生成

Console
php 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

参考サイト

https://www.wakuwakubank.com/posts/457-laravel-passport/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laradockを使用して Laravel の開発環境構築

ディレクトリの作成

mkdir myapp
cd myapp

Laradockの導入

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 bash

Laravelのコマンドは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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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_log

MySQLに関するコマンド

・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;
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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に入れられるはずです。

https://qiita.com/yamotuki/items/4b7d161973166752b729

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelアプリをHerokuで公開して動かしたら500エラーが発生

ログの確認

下記コマンドで常にコマンドを吐き出させることができます。
heroku logs --tail
※終了させるには、ctrl+c キーを押下してください。

私の場合、500エラーが出ていることがわかりました。
そこで詳細エラーログを確認しました。

詳細エラーログの確認

下記コマンドを使用し、HerokuのAPP_DEBUGをtrueに変更することで、エラー発生時にエラーメッセージが詳細に出力された画面に遷移します。
heroku config:set APP_DEBUG=true

image.png

エラーを再現し、エラーメッセージを確認することができました!
新しい項目を追加したのに、migrateを行うのを忘れていました。。。
確認し終えたらfalseに戻してあげましょう。

heroku config:set APP_DEBUG=true

以上、Qiita初投稿でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Herokuでのエラーログ確認方法

Herokuでエラー発生

自作のアプリケーションをHerokuにアップし動作確認をしたところエラーが発生しました。
エラーの場合はオリジナルのエラーページに飛ばしていたのでなんのエラーか確認できなかったので、
下記の方法でエラーを確認することができました。

ログの確認

下記コマンドで常にコマンドを吐き出させることができます。
heroku logs --tail
※終了させるには、ctrl+c キーを押下してください。

私の場合、500エラーが出ていることがわかりました。
そこで詳細エラーログを確認しました。

詳細エラーログの確認

下記コマンドを使用し、HerokuのAPP_DEBUGをtrueに変更することで、エラー発生時にエラーメッセージが詳細に出力された画面に遷移します。
heroku config:set APP_DEBUG=true

image.png

エラーを再現し、エラーメッセージを確認することができました!
新しい項目を追加したのに、migrateを行うのを忘れていました。。。
確認し終えたらfalseに戻してあげましょう。

heroku config:set APP_DEBUG=true

以上、Qiita初投稿でした。

編集後記

この記事を公開後同期の @laughingman より便利な機能を紹介してもらいました。

papertrailというアドオンです。

image.png
Papertrailを押下すると、管理画面に飛ぶことができます。
エラーが起きたよ!と言われて、自分で再現させずとも管理画面から探しにいくだけで良さそうですね。
[参考]http://vdeep.net/heroku-papertrail

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む