🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Heroku

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

MySQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

1回答

2200閲覧

herokuにデプロイできない。Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '

naota7118

総合スコア7

Heroku

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

MySQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/11/23 05:28

編集2020/11/23 09:05

herokuなら比較的簡単にデプロイできると思っていましたが、甘かったです。。。
自分でもいろいろ調べてやっているのですが、なかなか解決できず、お力を貸して頂ければ幸いです。
よろしくお願いいたします。

やりたいこと

Railsで製作したアプリをHerokuにデプロイしたい。

問題

マイグレーションが実行できない。
soketファイルを通じてMySQL serverにアクセスできない。

エラー文

naota7118@Naotas-MacBook-Air-6 my_dictionary % heroku run rake db:migrate Running rake db:migrate on ⬢ mydictionary7118... up, run.4842 (Free) rake aborted! Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

ソースコード

database.yml

ruby:database.yml

1default: &default 2 adapter: mysql2 3 encoding: utf8mb4 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: ユーザー名 6 password: パスワード 7 socket: /tmp/mysql.sock 8 9production: 10 <<: *default 11 adapter: mysql2 12 database: データベース名 13 username: ユーザー名 14 password: <%= ENV['MY_DICTIONARY_DATABASE_PASSWORD'] %>

herokuの環境変数の設定

naota7118@Naotas-MacBook-Air-6 my_dictionary % heroku config === mydictionary7118 Config Vars CLEARDB_DATABASE_URL: mysql://baf5318c99fb50:********@us-cdbr-east-02.cleardb.com/heroku_9a0e8d18bd341b2?reconnect=true DATABASE_URL: mysql2://root:password@localhost/my_dictionary_production?reconnect=true DB_HOSTNAME: localhost DB_NAME: my_dictionary_production DB_PASSWORD: password DB_PORT: 3306 DB_USERNAME: root

/etc/my.cnfの設定

[mysqld] socket="/tmp/mysql.sock" [client] socket="/tmp/mysql.sock"

他の方がやっていることを試した

エラー文で調べたところ、他の方はだいたい以下のやり方で解決していました。

・MySQLが起動できていないので、起動した。
・sockファイルの権限がなかったのでchownキーで権限を付与した。
・MySQLサーバーで使用しているUnixソケットと、クライアントソフトで使用しているUnixソケットのパスが違う場合、/etc/my.cnfに設定を書き加えて合わせた。

上記を試しましたが、自分の場合は解決しませんでした。

原因の推測と試したこと

① MySQLが起動しているか確認した時に、下記のように表示されたことから、MySQLサーバーが2つ存在しているのが問題か?と考え、どちらかをkillすればいいのではと思いやってみましたが、どちらかをkillすることができず、両方killされました。

naota7118@Naotas-MacBook-Air-6 my_dictionary % ps aux | grep mysqld naota7118 81867 0.0 0.0 4277500 696 s001 S+ 2:09PM 0:00.01 grep mysqld _mysql 81863 0.0 5.4 4919640 455580 s001 S 2:09PM 0:00.73 /usr/local/Cellar/mysql@5.6/5.6.47/bin/mysqld --basedir=/usr/local/Cellar/mysql@5.6/5.6.47 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql@5.6/5.6.47/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/usr/local/var/mysql/Naotas-MacBook-Air-6.local.pid --socket=/tmp/mysql.sock root 81659 0.0 0.0 4280124 1224 s001 S 2:09PM 0:00.05 /bin/sh /usr/local/Cellar/mysql@5.6/5.6.47/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/Naotas-MacBook-Air-6.local.pid

② 原因を調べるためにMySQLのエラーログを探しました。

naota7118@Naotas-MacBook-Air-6 mysql % sudo cat Naotas-MacBook-Air-6.local.err 2020-11-22 18:39:34 64495 [Note] InnoDB: 5.6.47 started; log sequence number 19042793 MySQL5.6.47が作動しました。ログの結果番号は19042793です 2020-11-22 18:39:34 64495 [Note] RSA private key file not found: /usr/local/var/mysql//private_key.pem. Some authentication plugins will not work. /usr/local/var/mysql//private_key.pemという場所にRSA private keyファイルが見つかりません。 いくつかの認証プラグインが実行しなくなります。 2020-11-22 18:39:34 64495 [Note] RSA public key file not found: /usr/local/var/mysql//public_key.pem. Some authentication plugins will not work. /usr/local/var/mysql//public_key.pemという場所にRSA public keyファイルが見つかりません。 2020-11-22 18:39:34 64495 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306 2020-11-22 18:39:34 64495 [Note] - '127.0.0.1' resolves to '127.0.0.1'; 2020-11-22 18:39:34 64495 [Note] Server socket created on IP: '127.0.0.1'. 2020-11-22 18:39:35 64495 [Note] Event Scheduler: Loaded 0 events 2020-11-22 18:39:35 64495 [Note] /usr/local/Cellar/mysql@5.6/5.6.47/bin/mysqld: ready for connections. Version: '5.6.47' socket: '/tmp/mysql.sock' port: 3306 Homebrew 2020-11-22 19:30:34 64495 [Note] /usr/local/Cellar/mysql@5.6/5.6.47/bin/mysqld: Normal shutdown

HerokuアカウントにSSHキーを追加しました。

$ heroku keys:add ~/.ssh/id_rsa.pub

以下のように追加されたことを確認しました。

naota7118@Naotas-MacBook-Air-6 my_dictionary % heroku keys === naota7118@gmail.com keys ssh-rsa AAAAB3NzaC...9WnrYBRUk= naota7118@Naotas-MacBook-Air-6.loc

これらを試しましたが、どうしても解決できないため、質問させていただきます。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

「sockファイル」は、ローカルホスト内で通信する場合にしか使えません。

Heroku環境でインスタンス内にDBを立てることは通常行いませんので、ClearDBなどの接続情報を設定してください。

投稿2020/11/23 06:09

maisumakun

総合スコア145967

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

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

maisumakun

2020/11/23 06:10

> soketファイルを通じてMySQL serverにアクセスできない。 無理です。ふつうにホスト名指定でアクセスしてください。
naota7118

2020/11/23 06:53

>「sockファイル」は、ローカルホスト内で通信する場合にしか使えません。 そうなんですね!教えていただきありがとうございます! > Heroku環境でインスタンス内にDBを立てることは通常行いませんので、ClearDBなどの接続情報を設定してください。 下記のClearDB(HerokuにあるDB)と接続させるということですね。 それのホスト名を指定するということですね。 ``` CLEARDB_DATABASE_URL: mysql://baf5318c99fb50:********@us-cdbr-east-02.cleardb.com/heroku_9a0e8d18bd341b2?reconnect=true ``` これからClearDBのホスト名を指定するやり方を調べてやってみます。 どうしていいかわからなかったのですが、何をやればいいかが明確になりました。 ありがとうございます。
naota7118

2020/11/23 07:03

CLEARDB_DATABASE_URL: mysql://baf5318c99fb50:********@us-cdbr-east-02.cleardb.com/heroku_9a0e8d18bd341b2?reconnect=true 上記のClearDBのURLのうち、「us-cdbr-east-02.cleardb.com」の部分がホスト名のようなので、ホスト名をこちらに指定し、MySQLを再起動したのですが、変わりませんでした。 この操作では、ClearDBホスト名で指定したことにはなっていないでしょうか?
maisumakun

2020/11/23 07:48

もしかしてですけど、接続情報と混ぜてパスワードを書いてしまっていませんか? そうだとしたらClearDBでパスワード変更と、こちらの記載変更&削除申請をしたほうがいいかもしれません。
naota7118

2020/11/23 08:10 編集

ありがとうございます。 ClearDBのURLに合うように、DB_HOSTNAME、DB_NAME、DB_PASSWORD、DB_USERNAMEの4つを修正しました。 そのため、$ heroku configで確認すると下記のような設定になっています。 CLEARDB_DATABASE_URL: mysql://baf5318c99fb50:********@us-cdbr-east-02.cleardb.com/heroku_9a0e8d18bd341b2?reconnect=true DATABASE_URL: mysql2://root:password@localhost/my_dictionary_production?reconnect=true DB_HOSTNAME: us-cdbr-east-02.cleardb.com DB_NAME: heroku_9a0e8d18bd341b2 DB_PASSWORD: ******** DB_PORT: 3306 DB_USERNAME: baf5318c99fb50 これに合うようにアプリのdatabase.ymlのproductionを下記のように設定しました。 production: <<: *default adapter: mysql2 database: heroku_9a0e8d18bd341b2 host: us-cdbr-east-02.cleardb.com username: baf5318c99fb50 password: ******** しかし、今もまだ同じエラーが表示されてしまっています。 「ClearDBでパスワード変更と、こちらの記載変更」のやり方は、これで合っていますでしょうか?
maisumakun

2020/11/23 08:12 編集

あの、パスワードをここで晒し続けるのが危険、という意味で注意したのですが… Teratail上では「password:(実際のパスワード)」のように、具体的な値を書かないような形に書き換えてください。
naota7118

2020/11/23 09:29 編集

あ、そういうことでしたか。失礼いたしました。 セキュリティへの認識が甘かったです。修正いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問