あまりに参考にならないかもしれませんが、かなりはまったので記録を残しておこうと思います。
環境
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| https://git.heroku.com/thawing-basin-xxxxx.gitHeroku | Application Error
$ 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できるようになりました。
コメント