Rails初心者でHerokuへのデプロイを考えpostgresで作したのですが、
development・testではmysqlを使用しようと思います。
◆理由
postgresに接続がうまく出来ないことと、postgresの情報を検索しても
ローカルではなくheroku上の物が多かったので、
ローカルではmysqlにしようかと考えたためです。
→ この考えはどうでしょうか?
Gemfile
1group :development, :test do 2 gem 'mysql2', '>= 0.4.4', '< 0.6.0' 3end 4 5group :production do 6 gem 'pg', '~> 1.1' 7end 8 9Gemfile.lockを削除、 10再bundle install済みです
database.yml default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: <%= ENV.fetch("DEV_DATABASE_PASSWORD") { "" } %> socket: <%= ENV.fetch("DEV_SOCKET") { "/tmp/mysql.sock" } %> development: <<: *default database: copy_check_development test: <<: *default database: copy_check_test production: url: <%= ENV['DATABASE_URL'] %>
rails db:createを使用しようとすると、mysqlを指定しているのに、
postgresに対するエラーが出てしまいます。
アドバイスお願いいたします。
rails db:create FATAL: permission denied for database "postgres" DETAIL: User does not have CONNECT privilege. Couldn't create 'd4di5mmpl0krgh' database. Please check your configuration. rails aborted! ActiveRecord::NoDatabaseError: FATAL: permission denied for database "postgres" DETAIL: User does not have CONNECT privilege. /home/user1/projects/copy_check/bin/spring:10:in `block in <top (required)>' /home/user1/projects/copy_check/bin/spring:7:in `tap' /home/user1/projects/copy_check/bin/spring:7:in `<top (required)>'
>Herokuへのデプロイを考えpostgresで作したのですが、development・testではmysqlを使用しようと思います。
本番環境と開発環境で異なるデータベースミドルウェアを使用するのは危険です。
データベースミドルウェアごとに、できることとできないことが異なりますので、開発環境ではうまくいくのに本番では動かない、といった事象が発生するもとになるので、本番でpostgresqlを使用するつもりなのであれば、なんとかして開発環境もpostgresqlを使うのをおすすめします。
ただ、mysqlを指定しているのにpostgresqlに接続しようとしてしまう原因は私もよくわかりませんでした。
`adapter: mysql2`で指定されているはずなのですが...
念のためですが、`DEV_SOCKET`という環境変数に何が入っているのかは見ておいてもいいかもしれません。
ただの思い付きですが、もしかしたら、postgresqlのソケットが指定されている、という可能性もなくはないかなと思いました。
CentOSを使用しているので、
DEV_SOCKET='/var/lib/mysql/mysql.sock'
で間違いなさそうです。
>本番環境と開発環境で異なるデータベースミドルウェアを使用するのは危険です。
やはりそうですよね。
(個人的にはEC2などで建てているのも楽しいのですが)
初心者なのでプロダクト優先で考えると、Herokuにした方が良いと考えました。
例えば先程のエラーでも、「FATAL: permission denied for database "postgres"」の検索をしてみると、
Postgresに関するページよりも、むしろHerokuに関するものばかりが出てきており、
Postgresの方がMySQLよりも圧倒的に少ない印象を受けてしまい、
(情報が少ないなら辞めたほうが良いかも)と考えたのですが、
Postgresを続けたほうが賢明でしょうか?
HerokuでMySQLはうまく動いたのですが、
無料枠が非常に小さかったことと、公式はPostgresとのことなので、
やはりPostgresなのかなとも思っている感じです。
postgresqlの方が情報が少ないというのは確かだと思います。
ただ、将来仕事にするつもりなのであれば、postgresqlに挑戦しておいてよいと思います。
仕事であれば、postgresqlを使う程度のことは余裕でできていないと話にならないからです。
逆に、将来においても、趣味でしかプログラムを書くつもりがないのであれば、mysqlで動かすのみ、なんならsqliteでも足りるかもしれません。
また、Google cloud platformなら、ただで使えるサーバーがあると聞いたことがあります。
今はどうかわからないのですが、クラウドサーバーをいじるのも面白いと感じるのであれば、それも調べてみてもいいかもしれません。
---
どうしてもpostgresが呼び出されるということであれば、別アプリをrails newから試してみてもいいかもしれません。
そちらでうまくいったら、何が違うのかを比較するという感じで。
ありがとうございます。
なるほど、そうですね。
postgresで行くことに決めました。
エラー文
4行目の「Couldn't create 'd4di5mmpl0krgh' database. Please check your configuration.」
'd4di5mmpl0krgh'が指しているのは、どうやら、herokuのDB名のようです。
つまり、ローカルから、heroku上のpostgresに接続を試みているような感じがしています。
>別アプリをrails newから試してみてもいいかもしれません。
database.ymlとGemfileは比較してみていまして、
この2つではないところに、何かありそうな気もしています。
>database.ymlとGemfileは比較してみていまして、
既に別のアプリをrails newしているということでしょうか?
また、その別アプリケーションは、mysqlに接続できているということでしょうか??
(それともpostgresql?)
>'d4di5mmpl0krgh'が際しているのは、どうやら、herokuのDB名のようです。
>つまり、ローカルから、heroku上のpostgresに接続を試みている
もしかしたらですが、実行モードがproductionになっているのかもしれませんね...
どうしてそうなるのか、全くわからないのであくまで思い付きです...
はい、新規でrails newしまして、
mysqlをcraeteやdropが出来ている状態です。
新規の方でのpostgresは同じくつながらず、試行錯誤している状態です。
rails c > Rails.nev > developmentモードになっているんですよね。。。
横から失礼します。
自分もSqlite3からMysqlに載せ替えたときに同じような現象になりました。なので、思い当たる部分で疑問があります。
database.ymlにあるdefaultのadapterを教えてもらっていいですか?
こんにちは、ありがとうございます。
default: &default
adapter: mysql2
になっている状態です。
その後、マイグレーションの初期化とかされましたか?
回答1件
あなたの回答
tips
プレビュー