質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

2回答

4523閲覧

(Laravel)(MySQL)herokuでmigrateできない。

tonenao

総合スコア5

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/04/04 05:54

編集2020/04/04 08:07

現在困っていること

laravel+vue.js+mysqlを使ってローカル上で作成したアプリをherokuにデプロイし、

heroku run php artisan migrate

を実行したところ、エラーが出てDBが作成できません。

※herokuで作成されたURIにアクセスしたところ、DBに関係のないページは正常に表示されています。

初めてのデプロイ作業で同じエラーで丸2日頑張ってみましたが完全に詰まってしまい困っております。アドバイスをお願いいたします。

発生している問題・エラーメッセージ

In Connection.php line 664: SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_sch ema = heroku_d66e10e25ca4724 and table_name = migrations and table_type = 'BASE TABLE') In Connector.php line 70: SQLSTATE[HY000] [2002] No such file or directory

heroku configの内容

APP_ENV: heroku APP_KEY: **** CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true DB_CONNECTION: mysql DB_DATABASE: [データベース名] DB_HOST: [ホスト名] DB_PASSWORD: [パスワード] DB_PORT: 3306 DB_USERNAME: [ユーザー名] LANG: ja_JP.UTF-8 TZ: Asia/Tokyo

※APP_KEYは、

$ heroku config:set APP_KEY=$(php artisan key:generate --show)

にて設定済みです。

環境

laravel 5.8.37
PHP 7.3.9

【参考】database.phpの内容

return [ 'default' => env('DB_CONNECTION', 'mysql'), 'connections' => [ 'sqlite' => [ *省略* ], 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', '[DB名]'), 'username' => env('DB_USERNAME', '[DBユーザー名]'), 'password' => env('DB_PASSWORD', '[DBパスワード]'), 'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, // 'unix_socket' => '/tmp/mysql.sock', 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'pgsql' => [ *省略* ], 'sqlsrv' => [ *省略* ], ], 'migrations' => 'migrations', 'redis' => [ 'client' => env('REDIS_CLIENT', 'predis'), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'predis'), 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), ], 'default' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DB', 0), ], 'cache' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_CACHE_DB', 1), ], ], ];

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lulucom

2020/04/04 06:48

HerokuのWebサイトにログインすると、アプリのダッシュボード画面から ClearDB MySQL のダッシュボード画面へも行けるかと思いますが、そこで見るとデータベースは動いてそうでしょうか?
tonenao

2020/04/04 06:57

ダッシュボーで画面のInstalled add-onsの箇所でClearDB MySQL は表示されております。「ここに表示されている=動いている」と勝手に認識していましたが、動いているかどうかはまた別なのでしょうか。もし別ならどのように確認するかご教授いただけますでしょうか。。
Lulucom

2020/04/04 07:00

そのClearDB MySQLをクリックすると、ClearDB MySQL のダッシュボード画面へも行けるかと思います。そこでは何かエラーなど出ていないでしょうか。
tonenao

2020/04/04 07:19 編集

はい。ダッシュボード画面に遷移しましたが、特にエラー表示等は見当たりませんでした。(キャプチャを上記に添付しておきます。)
Lulucom

2020/04/04 07:32 編集

そうですか... .envファイルがGitにコミットされてしまっていて、Herokuにもプッシュされてしまい、.envファイルが参照されてしまっている、ということはないですよね?
tonenao

2020/04/04 07:38

いろんなサイトを参考にさせていただきましたが、.envファイルはローカルでしか参照されないという認識でした。その可能性がある場合、.envファイルのみをコミットせずにする方法があるのでしょうか?あるいは.envファイルやdatabase.phpファイルの中身を書き換えるなどで対処できそうでしょうか?
Lulucom

2020/04/04 07:44

Laravelプロジェクト作成当初からある.gitignoreファイルの中に.envが書かれているはずです。このファイルに書かれているものはGitから無視されます。.envファイルをGitHubなどにプッシュしてしまうと危険なのでそうなっています。
tonenao

2020/04/04 07:47

一つ勉強になりました! 早速確認いたしましたところgitignoreファイルの中に「.env」が含まれておりましたので、おそらくこの点は大丈夫かと思われます。
Lulucom

2020/04/04 07:57

あとは、database.phpファイルを書き換えたりしていて、環境変数をきちんと参照できていない、ということはないでしょうか。Laravelプロジェクト作成時から書き換えていなければそのようなことはないはずですが。
tonenao

2020/04/04 08:09

database.phpの内容を上記に追記いたしました。 ローカル環境から一部変更したのはcharset, collection,unix_soketの箇所くらいだと記憶しています。他は書き換えてはいないはずです。
Lulucom

2020/04/04 08:10

「heroku configの内容」に書かれている環境変数はすべてでしょうか。例えば、もしDATABASE_URLという環境変数がセットされていると、そちらが優先されそうな気はしています。
tonenao

2020/04/04 08:19

heroku configを実行すると、CLEARDB_DATABASE_URLはデフォルトで表示されますが、それ以外はセットされてはいないですね。APP_URLは試しにセットしてみたことはありますが、現在は削除(unset)しております。
guest

回答2

0

ベストアンサー

Heroku 上で Tinker を起動して、データベース接続の設定値を確認してみると何か手がかりになるかもしれません。

$ heroku run php artisan tinker ... >>> config('database.default') => "mysql" >>> config('database.connections.mysql') => [ "driver" => "mysql", "url" => null, "host" => "ホスト名", "port" => "ポート番号", "database" => "データベース名", "username" => "ユーザ名", "password" => "パスワード", "unix_socket" => "", "charset" => "utf8mb4", "collation" => "utf8mb4_unicode_ci", "prefix" => "", "prefix_indexes" => true, "strict" => true, "engine" => null, "options" => [], ] >>>

投稿2020/04/04 08:06

Lulucom

総合スコア1899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tonenao

2020/04/04 08:23

ありがとうございます!早速試してみたところ、 "unix_socket" => "/Applications/MAMP/tmp/mysql/mysql.sock" となりました。 先ほど回答いただいたように、'unix_socket' => env('DB_SOCKET', '')に修正して再度試してみます!
tonenao

2020/04/04 08:45

あー!!できました!migrateできましたー! tinkerの使い方が少し分かった気がします。 本当にありがとうございます!!
Lulucom

2020/04/04 08:46

いえいえ、本当に良かったです。
guest

0

config/database.phpファイルの unix_socket を以下のように修正する必要がありそうです。

php

1 'unix_socket' => env('DB_SOCKET', ''),

Herokuアプリには DB_SOCKET をセットしていないので、'/Applications/MAMP/tmp/mysql/mysql.sock' という値が採用されてしまい、今回のエラーになってしまっているのではないかと思われます。

投稿2020/04/04 08:13

編集2020/04/04 08:16
Lulucom

総合スコア1899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問