rails db:create:allできるまでの話
RailsとMySQLでアプリケーションを作成しようとするものの、
のっけからデータベースの作成につまづいた話の覚書です。
※かなり初歩的なミスでしたので暖かく見守ってください。
とにかく db:create:all出来ない
Rspecでテストを回したくてテストデータベースも作りたく、
bin/rails db:create:all
するもいくつかの壁に阻まれる。
エラー① "Can't connect to local MySQL server"
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
結果 MySQLサーバ起動しましょう
mysql.server start
でこのエラーは解決。なんて基本的な!穴があったら入りたい。
けれどもこれだけではdb:create
できず。エラー②へ進む。
エラー② "Access denied for user 'root'@'localhost' (using password: NO)"
Access denied for user 'root'@'localhost' (using password: NO)
MySQLのrootユーザーへのアクセスが出来なかったよーと言われる。
MySQLのrootユーザーのパスワードはインストール時に設定済み。
mysql -u root -p
ではちゃんと設定したパスワードでMySQLにアクセスできる。
なんでや??
そんな時はこちらをチェック。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: localhost
パスワード空欄のままでした。。
結果 database.ymlにちゃんとパスワード設定しておきましょう。
しかしそのままパスワードを入れるのはよろしくないので、
今回はdirenvで環境変数を設定。
direnvの使い方は下記記事を参考にしました。
direnvを使おう
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: ENV['DB_USERNAME']
password: ENV['DB_USERPASSWORD']
host: localhost
export DB_USERNAME=root
export DB_PASSWORD=password
ふぅ、これでよし。(よくない)
エラー③へ進む。
エラー③ "Access denied for user 'ENV['DB_USERNAME']'@'localhost' (using password: YES)"
Access denied for user 'ENV['DB_USERNAME']'@'localhost' (using password: YES)
Couldn't create 'product_development' database. Please check your configuration.
こんなポカミスするのは私くらいでしょう。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: ENV['DB_USERNAME']
password: ENV['DB_USERPASSWORD']
host: localhost
今見たら一瞬で何が間違ってるかわかるのに!!
結構な時間さまよってました。。穴があったら入りたい(2回目)。
結果 <%= %>
抜けてますね。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_USERPASSWORD'] %>
host: localhost
はい。これでおっけーーー!!
では、なかった。エラー④へ進む。
エラー④ "Access denied for user 'product'@'localhost' (using password: NO)"
え、なんでなんで?環境変数うまく設定できてなかった?
そしてまた'using password: NO'。
よく見たらuser 'product'@'localhost'
と、usernameが変わっている。
これはdb:create:all
していることがミソでした。
結果 本番環境用も忘れずに、ってことでした。
db:create:all
してたので本番環境用のDBも作ろうとしてくれてたんですね。ごめんなさい。
production:
<<: *default
database: ai_metimer_production
username: product
password: <%= ENV['PRODUCT_DATABASE_PASSWORD'] %>
現状、database.ymlに記載されたユーザー(上記の場合、productという名前のユーザー)はMySQL上に作ってなかったので、アクセスできなかったのでした。
ということでMySQLで本番用のユーザーを作り、そのユーザーに本番用DBへのアクセス権限を付与。
そのユーザー名とパスワードをdatabase.yml、.envrcに設定。
production:
<<: *default
database: ai_metimer_production
username: <%= ENV['PRODUCT_DATABASE_USERNAME'] %>
password: <%= ENV['PRODUCT_DATABASE_PASSWORD'] %>
export DB_USERNAME=root
export DB_PASSWORD=password
export PRODUCT_DATABASE_USERNAME=product
export PRODUCT_DATABASE_PASSWORD=hogehoge
これで見事、開発用・テスト用・本番用のデータベースが作成されました!わーい
公開恥ずかしすぎるけど自分への戒めのための備忘録でございました。
参考
Author And Source
この問題について(rails db:create:allできるまでの話), 我々は、より多くの情報をここで見つけました https://qiita.com/KH14/items/cc4558a19fed4dfc4809著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .