20210426のlaravelに関する記事は6件です。

DockerでLaravelの開発環境

ディレクトリは以下のような構成。 docker-compose-laravel/ ├ docker ┬ php ─ Dockerfile │ └ web ─ default.conf ├ docker-compose.yml ├ laravel-project webコンテナ、dbコンテナ、appコンテナの3つを立ち上げる。 appコンテナのイメージはDockerfileより作成。 docker-compose.yml version: '3' services: web: image: nginx:1.15.6 ports: - '8000:80' #ホスト:コンテナ depends_on: - app #appコンテナ起動後に立ち上げる volumes: - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf #ホストディレクトリ:コンテナディレクトリ - .:/var/www/html app: build: ./docker/php volumes: - .:/var/www/html depends_on: - mysql mysql: image: mysql:5.7 environment: #DBの基本設定 MYSQL_DATABASE: sample MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: password ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql volumes: mysql-data: #mysql-dataというディレクトリを作成 Dockerfile FROM php:7.2-fpm # コンポーザーをインストール RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer RUN apt-get update \ && apt-get install -y \ git \ zip \ unzip \ vim RUN apt-get update \ && apt-get install -y libpq-dev \ && docker-php-ext-install pdo_mysql pdo_pgsql WORKDIR /var/www/html laravelの基本設定。おそらくDockerfileに下記を記載しても大丈夫なはず。 terminal lnoueryo@DESKTOP:~/$ composer create-project --prefer-dist laravel/laravel lnoueryo@DESKTOP:~/$ my-laravel-app lnoueryo@DESKTOP:~/$ cd my-laravel-app lnoueryo@DESKTOP:~/$ php artisan migrate .env DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=sample DB_USERNAME=user DB_PASSWORD=password nginxの設定。 default.conf server { listen 80; root /var/www/html/my-laravel-app/public; #publicを読む index index.php index.html index.htm; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { #phpを読み込ませる fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } } さぁ立ち上げよう。 docker-compose up -d VScodeで書く際に権限の問題が発生するため都度下記のコマンドを使う。 terminal chown www-data storage/ -R chmod -R 777 hoge/ #rootじゃない人はsudoコマンドね こちらのサイトを参考にさせて頂きました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Lambda上でLaravelを動かしてs3にアクセスしようとしたが出来ない時のメモ

環境 AWS Lambda bref Laravel thephpleague/flysystem-aws-s3-v3 結論 公式ドキュメントは良く読むこと。 https://bref.sh/docs/frameworks/laravel.html#file-storage-on-s3 解説 Lambdaは関数実行時に実行ロールから以下の情報を環境変数に設定する。 AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN 上の情報を使用しないとs3にアクセス出来ない。 デフォルトのLaravelだと上2つはconfigで渡してくれるが、 AWS_SESSION_TOKENは渡してくれないので下のように追記する必要がある。 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'token' => env('AWS_SESSION_TOKEN'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), ], Lambdaが勝手に設定してくれるので.envにAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKENを追記する必要は無い。 参考 https://qiita.com/kenji0302/items/fec0c3fd79ceeabaf5fd https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime https://github.com/laravel/laravel/pull/5138
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GitHub ActionsでLaravelのPHPUnitを並列実行

背景 GitHub Actionsでのテストの数が多すぎるので分散処理がしたい 良参考記事があったのでそれを元にLaravel用に設定 Laravelは5.5~6.xを想定 結論 github/workflows/phpunit.yml name: PHPUnit on: . . . #略 jobs: test-php: name: Test PHP runs-on: ubuntu-latest strategy: fail-fast: false matrix: parallelism: [5] id: [0,1,2,3,4] . . . #略 services: mysql: image: mysql:5.7 . . . #略 steps: - uses: actions/checkout@v2 - name: Setup PHP . . . #略 - name: Run Tests run: | find tests/ -name '*Test.php' | sort | awk "NR % ${{ matrix.parallelism }} == ${{ matrix.id }}" | xargs php ./creare_multithread_phpunit_xml.php ./vendor/bin/phpunit --configuration ./ci_phpunit.xml creare_multithread_phpunit_xml.php <?php $baseDir = realpath('./'); $files = array_slice($argv, 1); $xmlFileStringData = []; foreach ($files as $file) { $xmlFileStringData[] = "<file>{$baseDir}/{$file}</file>"; } $testFileString = implode("\n", $xmlFileStringData); $template = <<<XML <?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals="false" backupStaticAttributes="false" bootstrap="vendor/autoload.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false"> <testsuite name="Test Case"> {$testFileString} </testsuite> <php> <env name="APP_ENV" value="testing"/> <env name="CACHE_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/> <env name="QUEUE_DRIVER" value="sync"/> <env name="DB_DATABASE" value="test_db"/> <env name="DB_USERNAME" value="root"/> <env name="DB_PASSWORD" value="root"/> </php> </phpunit> XML; file_put_contents("ci_phpunit.xml", $template); 基本的にはGithubActions で phpunit の並列実行を参照いただけると。 結果 こうなる。 参考記事 GithubActions で phpunit の並列実行
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのチュートリアルとしてTodoアプリを作成していく。~Part5~

はじめに 私はプログラミング歴1年の初心者です。 実務でWebサイトのコーディングを1年間行ってきました。 そろそろシステム開発もできるようになりたいということで LaravelやReactをこれから勉強していこうと思っております。 この記事の目的 Laravelのチュートリアルを進めて行く中で Laravelの主要な仕組みを理解することです。 この記事は前回の記事があるので、もしご覧になっていない方がいればこちらからどうぞ。 参考記事(チュートリアル記事) こちらのTodoアプリを作成するチュートリアル記事を参考にさせていただきました。 すごく丁寧に説明してくださっているのですごく勉強になりました。 目次 (1)開発環境 (2)アプリケーション設計 (3)プロジェクト作成 (4)一覧機能 (5)作成機能 (6)編集機能 (7)認証機能 (8)エラーハンドリング ↓今回はここから(認証機能の後半から)↓ (9)デプロイ HerokuとLaravelでデプロイ Herokuを準備する このページから無料でサインアップ。 このページからHeroku CLIをインストール 今回の環境 ポイントは ○デプロイは構築した環境によって、方法が変わってくるということ。 ○つまり先にどのように環境構築していくかを決めておくことが大切になる。 デプロイはHeroku フレームワークはLaravel DBはMySQL Herokuでアップしたいので、gitを使おう。 ポイントは ○Herokuにアップするのに、gitを使うと便利なため、gitHubにアップする。 まずはローカルリポジトリを作成してGit管理化に置く // ローカルリポジトリを作成 $ cd todoapp2 $ git init // addとcommitをする $ git status $ git add -A  ←// 変更のあったすべてのファイルをインデックスにaddする $ git commit -m 'first commit' ←// ローカルリポジトリにcommitする `` #### 次にリモートリポジトリを作成する 以下のリンクからgitHubにログイン https://github.com/join/customize 「New Repository」で新しいリモートリポジトリを作成する。 #### その次にローカルをリモートにPushする。 ```terminal // リモートリポジトリURLをoriginという名前で登録する $ git remote add origin <RemoteRipositoryURL> // ローカル(master)をリモート(origin)にアップする $ git push origin master 次にHerokuの設定をする まずはHerokuサーバーを立ち上げる // herokuCLIにログインする。 $ heroku login // herokuサーバーを作成する。 $ heroku create todoapp2ks 次にclearDBを導入する // clearDBを導入する $ heroku addons:create cleardb:ignite // Procfileを作成する $ touch Procfile // 以下を追記 web: vendor/bin/heroku-php-apache2 public/ // clearDBの環境変数を確認する $ heroku config:get CLEARDB_DATABASE_URL # URLが表示されて、こんな感じに出力される mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true // heroku環境に直接環境変数を設定する(.envではない) $ heroku config:set DB_CONNECTION=mysql $ heroku config:set DB_PORT='3306' $ heroku config:set DB_USERNAME='[ユーザー名]' $ heroku config:set DB_PASSWORD='[パスワード]' $ heroku config:set DB_HOST='[ホスト名]' $ heroku config:set DB_DATABASE='[データベース名]' // 設定した内容を確認する $ heroku config // APP_KEYを設定する $ heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show) // APP_ENVを設定する $ heroku config:set APP_ENV=heroku // 他にも設定しておく $ heroku config:set LANG=ja_JP.UTF-8 $ heroku config:set TZ=Asia/Tokyo Herokuにpushをして、データベースの作成をして、Herokuでデプロイする // Herokuにpushする $ git push heroku master // migrateして、データベースにテーブル作成する $ heroku run php artisan migrate // どうやら正しい設定をしていないからエラーが出てきた In Connection.php line 678: SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.table s where table_schema = heroku_ef2b49144d4507a and table_name = migrations and table_ty pe = 'BASE TABLE') In Connector.php line 70: SQLSTATE[HY000] [2002] Connection refused // 解決方法は環境変数を見直すこと 自分の場合はDB_HOSTのところをDB_HOSTNAMEとしていました。 →もう修正はしてありますが、こういうところ気をつけないと…。 // これで成功! $ heroku run php artisan migrate // Herokuに再度デプロイ $ git push heroku master // Herokuでデプロイしたアプリを確認 $ heroku open // ここで「Forbidden」の表示が… 実は上記の流れだとだめみたいです。 →Procfileがpushされていませんでした。 →最初に作っておくとよかったです。 // 気を取り直して $ git add Procfile $ git commit -m 'Procfile Add' $ git push origin master $ heroku open 写った! さいごに 無事デプロイ完了できてよかったです。 今回1回目と同じような流れでデプロイしたのですが、 違うところで色々とエラーが起きてきました。 同じ作業をするだけでも別のエラーと出会うことになるのですね。 2回目もすごく勉強になりました。 色々と試行錯誤していくことが重要ですね。 しっかり起きていることから目をそらさずに どうしてこうなっているのか 一つひとつに対して紳士に向き合っていくことが重要ですね。 プログラミングの世界が理解できてくると エラーへの対処も早くなってくるし、 正確な対処法を検索する方法もわかってきますね。 インプットとアウトプットのバランスが大切ですね!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLのLOAD DATA INFLEコマンドでファイルをインポートする

はじめに 担当している案件でMySQLで大量(10万件規模)のデータをinsertする必要があったため、 LOAD DATA INFILE コマンドでデータをインポートした際のナレッジや調査過程をまとめました。 案件で使用していたフレームワークがLaravelだったため、Laravel寄りのリンクが多くなっていますが、 他の言語/フレームワークでも、SQLを直接発行出来る機能があれば、代用は可能かと思います。 またMySQL以外でもOracleでも同様のコマンドがあるので、DBをOracleに変えた場合でも同じ実装は可能かと思います。 注意点 MySQLの起動オプションにlocal_infileを追加 MySQLの起動オプションにlocal_infileの設定を追加します。 以下のファイルに下記のように設定を追加してください。 /etc/mysql/conf.d/my.cnf local_infile=true mysqlコマンドの場合は上記のオプションを引数に追加して起動しましょう。 configファイルに追記した場合は、MySQLのサービスの再起動も忘れずに! デバッグ/エラー解析 LOAD DATA INFILE コマンドは、MySQL側のインポート機能を直接呼び出す仕組みのため、 SELECT文やINSERT文のSQLの発行時のようにアプリケーション側のログにエラー内容が出力されることがありません。 そのため、デバッグやエラー解析は困難を極めます。 インポート先のテーブル名やカラム定義、インポートするファイル名やファイルパス等は念入りに確認しておいた方が良さそうです。 意外にtypoしていたりすると、気付かずハマります(苦笑) 参考 LaravelでデータをDBに保存したいときのメモリ不足をなんとかする LaravelでLOAD DATA LOCAL INFILEできない Laravel ExcelパッケージでCSVデータをDBへ一括登録する方法 REPLACEとAUTO_INCREMENTを使用してLOADDATAINFILEを実行しようとしています 【MySQL】LOAD DATA INFILE でCSVデータをインポートしたい MySQLの「load data LOCAL infile」の「LOCAL」って何?どこ? MySQL LOAD DATA LOCAL INFILE で特定列を指定してインポートする
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel タイムスタンプを無効にした(メモ)

使わない場合はエラーがでたりするため無効にしておいたほうがいい。 class User extends Eloquent { public $timestamps = false; //こいつを追加する }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む