RailsでpostgreSQLを使えるようにするまでのメモ

あまりに参考にならないかもしれませんが、かなりはまったので記録を残しておこうと思います。

スポンサーリンク

環境

Windows上に構築した仮想マシンCentOSで作業をしています。

$ cat /etc/redhat-release
CentOS release 6.10 (Final)

下記のサイトを参考にすすめました。
Rails5で初めてのPostgreSQLを使うときの手順とエラー解消方法[メモ] – Qiita

データベース作成可のユーザーをパスワード付きで作成します。

postgres=# create role projectname with createdb login password 'password';

railsアプリケーションを作成します。postgresqlを使うような設定でアプリを作成します。

$ rails new mymemo -d postgresql

Gemfileにsccafoldを使用するために必要なgemを追加しました

# scaffold確認用に必要
gem 'therubyracer', platforms: :ruby
gem 'jquery-rails'
# gem 'turbolinks' これはデフォで入ってました
bundle install

次にconfig/database.ymlに追加記述しなければならないそうで下記を追加しました。

default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
#下記3点を追記 23~25行目に追加しました。
username: mymemo
password: mymemo
host: localhost

次にrails db:migrateを実行します。

rails db:migrate

ここでエラーが発生しました。

スポンサーリンク

PG::ConnectionBad: FATAL: ユーザ”mymemo”のIdent認証に失敗しました

Ident認証が失敗するのでネットの情報をもとに /var/lib/pgsql/11/data/pg_hba.conf を編集しました。IPv6のところのidentをtrustに変えました。※注意 ここを書き換えてもpostgresqlを再起動しないと設定が変わりません!!かなり重要です。※

$ sudo vi /var/lib/pgsql/11/data/pg_hba.conf

# IPv6 local connections:
#host    all             all             ::1/128                ident
host    all             all             ::1/128                 trust
rails db:migrate

そしたらまたエラーが発生しました。

データベース”mymemo_development”は存在しません

ネットの情報をみてたら、なかったから作ったという人がいたので真似をしました。

-bash-4.1$ createdb mymemo_development -O mymemo
rails db:migrate

エラーはでませんでした!

postgreSQLが使えるようになったのでHerokuを使ってみる

Gemfileを編集後Procfileを作成、そのごcommitします。次に
$ heroku create コマンドを実行すると、以下のようになり、ここまでは問題なさそうです。

$ heroku create
Creating app... done, ⬢ thawing-basin-xxxxx
Heroku | Application Error
| https://git.heroku.com/thawing-basin-xxxxx.git

$ heroku createを実行すると適当なURLとgitのリモートが作成されるのでそこにpushします。↓でもエラーがでてしまいました。

$ git push heroku master
error: The requested URL returned error: 403 Forbidden while accessing https://git.heroku.com/mymemo.git/info/refs
fatal: HTTP request failed

ネットで有用な情報がなかったので手あたり次第にやっていきます。$ heroku apps を実行しアプリ名を表示させてみます。

$ heroku apps
quiet-river-79624

.git/configファイルを編集 herokuremote のurlを変更してみました。

[remote "heroku"]
        url = https://git.heroku.com/quiet-river-79624.git
        fetch = +refs/heads/*:refs/remotes/heroku/*

うまくいったかとおもいましたがまたエラーがでました。

remote: !
remote: ! An error occurred while installing ruby-2.3.1
remote: !
remote: ! This version of Ruby is not available on Heroku-18. The minimum s upported version
remote: ! of Ruby on the Heroku-18 stack can found at:
remote: !
remote: ! https://devcenter.heroku.com/articles/ruby-support#supported-runt imes
remote: !

An error occurred while installing ruby-2.3.1
This version of Ruby is not available on Heroku-18. The minimum s
of Ruby on the Heroku-18 stack can found at:
!https://devcenter.heroku.com/articles/ruby-support#supported-runt

ネットで調べるとどうもrubyのバージョンが低いらしいということで、rubyをあたらしくします。変更前のバージョンを確認しておきました。

ruby -v
#現在のrubyバージョン
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]

heroku -v
#herokuのバージョン
heroku/7.18.5 linux-x64 node-v11.0.0

ネットの情報を見ていると rbenv というものが入って入ればrubyがインストールできるとのことでした。幸いにもドットインストールを見て環境構築するとrbenvは最初から入っているようです。$ rbenv install -l はrbenvがインストールできるrubyの一覧を表示してくれるようです。

$ rbenv -v
rbenv 1.1.1-39-g59785f6

# インストールできるrubyのバージョンの確認コマンド
$ rbenv install -l

rubyインストールに必要なものを先にインストールするコマンドを実行しましたが既にすべて存在していました。
$ rbenv install 2.5.1 を実行してruby 2.5.1をインストールします。(反応がないのでびっくりしますがちょっとまっていれば終わります)

# rubyインストールに必要なものを先にインストール
$ sudo yum install -y bzip2 gcc openssl-devel readline-devel zlib-devel

# ruby本体のインストール 
$ rbenv install 2.5.1

最後はrubyのバージョン切り替えの為にrbenvをいれてるので、rbenvにどのバージョンを使うか指定しなければならないそうです。

# rbenvで2.5.1を使うように設定
$ rbenv global 2.5.1

# 確認
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

無事にインストールできました。

この状態でbundle installします。するとなぜかruby2.5.1があるのにもかかわらずbundle installできません

[vagrant@localhost mymemo]$ bundle install --path=vendor/bundle
Your Ruby version is 2.3.1, but your Gemfile specified 2.5.1

いろいろ調査してみると、Rails環境のときだけruby2.3.1が参照されている。ネットの情報をみるとrubyのバージョンには環境変数が設定されているらしく、それを最優先で読み込むようになっているようです。以下のコマンドで2.5.1にセット↓

$ rbenv shell 2.5.1
$ ruby -v
#rails環境で2.5.1を確認
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

いろいろやっているとrailsが動かなくなった。↓この問題は~/.rbenv/shimsへいって $ gem install railsをすることで解決。

rbenv: rails: command not found

The `rails’ command exists in these Ruby versions:
2.3.1

gem pg をインストールしようとするとlibpq-fe.h が見つけられないエラーが発生。下記のサイトの方法で解決しました。yum install postgresql-develでは解決しません。バージョンが低いpostgresqlがインストールされてしまい。どのみちエラーになりますので、ディレクトリを指定してgem pg をインストールする方法がよいかと思います。
centos – rails gem pg のインストールでlibpq-fe.hが見つからない – スタック・オーバーフロー

休憩

rubyのバージョンをあげたけどまたエラーがおきました。
An error occurred while installing ruby-2.3.1

とりあえず $ git add -Aしとけば解決できたという記事を見かけたのでそのとおりにしてみました。

$ git add -A
$ git commit -m "all file"
$ git push heroku master

##省略##
 -----> Launching...

とりあえず成功しました。

次にherokuにpostgresqlのアドオンを追加します。そのあとmigrateします。

$ heroku addons:add heroku-postgresql
$ heroku run rake db:migrate

これでようやくherokuアプリにアクセスできるようです。

なんとかアクセスできました。

まとめ

いろいろやりましたがやらなくてもいいこともあったかもしれません。

おおきなポイントはgem pgのインストールはpostgresqlがあるディレクトリを指定してやればインストールできることでした。
git push heroku master は rubyのバージョンが低いなどとエラーがでるのですが、結局原因はわからずじまいです。この問題については今回は git add -Aですべて変更をコミットすることでなぜかpushできるようになりました。

コメント

タイトルとURLをコピーしました