現在困っていること
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), ], ], ];
HerokuのWebサイトにログインすると、アプリのダッシュボード画面から ClearDB MySQL のダッシュボード画面へも行けるかと思いますが、そこで見るとデータベースは動いてそうでしょうか?
ダッシュボーで画面のInstalled add-onsの箇所でClearDB MySQL は表示されております。「ここに表示されている=動いている」と勝手に認識していましたが、動いているかどうかはまた別なのでしょうか。もし別ならどのように確認するかご教授いただけますでしょうか。。
そのClearDB MySQLをクリックすると、ClearDB MySQL のダッシュボード画面へも行けるかと思います。そこでは何かエラーなど出ていないでしょうか。
はい。ダッシュボード画面に遷移しましたが、特にエラー表示等は見当たりませんでした。(キャプチャを上記に添付しておきます。)
そうですか...
.envファイルがGitにコミットされてしまっていて、Herokuにもプッシュされてしまい、.envファイルが参照されてしまっている、ということはないですよね?
いろんなサイトを参考にさせていただきましたが、.envファイルはローカルでしか参照されないという認識でした。その可能性がある場合、.envファイルのみをコミットせずにする方法があるのでしょうか?あるいは.envファイルやdatabase.phpファイルの中身を書き換えるなどで対処できそうでしょうか?
Laravelプロジェクト作成当初からある.gitignoreファイルの中に.envが書かれているはずです。このファイルに書かれているものはGitから無視されます。.envファイルをGitHubなどにプッシュしてしまうと危険なのでそうなっています。
一つ勉強になりました!
早速確認いたしましたところgitignoreファイルの中に「.env」が含まれておりましたので、おそらくこの点は大丈夫かと思われます。
あとは、database.phpファイルを書き換えたりしていて、環境変数をきちんと参照できていない、ということはないでしょうか。Laravelプロジェクト作成時から書き換えていなければそのようなことはないはずですが。
database.phpの内容を上記に追記いたしました。
ローカル環境から一部変更したのはcharset,
collection,unix_soketの箇所くらいだと記憶しています。他は書き換えてはいないはずです。
「heroku configの内容」に書かれている環境変数はすべてでしょうか。例えば、もしDATABASE_URLという環境変数がセットされていると、そちらが優先されそうな気はしています。
heroku configを実行すると、CLEARDB_DATABASE_URLはデフォルトで表示されますが、それ以外はセットされてはいないですね。APP_URLは試しにセットしてみたことはありますが、現在は削除(unset)しております。
回答2件
あなたの回答
tips
プレビュー