hiyoko-programingの日記

プログラミングを勉強したてのひよっ子。   エンジニア目指して勉強中。

bin/rails db:create エラー

エラー解決

bin/rails db:create を(2回目作成時)以下の

エラー。

 

could not translate host name "db" to address: Name does not resolve

これは、

db というホストが見つかりませんという意味。

 

 host: db を確認。

Railsからはdockerで設定したリンク(ホスト)が見えない、ということなので、環境変数を経由することにする。


例えば
docker-compose.ymlに次のように追加

environment:
  - DATABASE_HOST=db
  - DATABASE_PORT=5432


database.ymlに次のように追加

default: &default
  adapter: postgresql
  encoding: unicode
  host: <%= ENV.fetch('DATABASE_HOST') { 'localhost' } %>
  port: <%= ENV.fetch('DATABASE_PORT') { 5432 } %>
これで解決した!

incompatible library version(ライブラリの互換性)

incompatible library version - /Users/owner/.rvm/gems/ruby-2.6.4/ruby/2.6.0/gems/msgpack-1.3.3/lib/msgpack/msgpack.bundle (LoadError)

 

上記のエラーについて。

 

どうやらバージョンが違うよ、と言っている。

原因:incompatible library version(ライブラリの互換性)

 

incompatible=互換性

library version=ライブラリのバージョン

 

つまりディレクトリ(現在作業しているアプリ)で使っているrubyのバージョンとgemに互換性がない。

・エラーでてるgemを削除
・またはrubyのバージョン上げる
・またはrubyのバージョン下げる

 

バージョンがずれているので、bundleinstallする際にパスを指定する。

 

 $ bundle install --path vendor/bundle

 

--pathオプション

異なるバージョンのgemが混ざるのが嫌な人はつけた方が良いらしい。

Blocked Hosts の設定

Blocked Hosts はRails6の新機能。

 

ブラウザがRailsアプリケーションにアクセスする際に、

使用できるホスト名(ドメイン名)を制限するためのもの。

 

デフォルトでは、localhostのみが許可されている。

今回は

 example.com   と baukis2.example.com  の2つをホスト名として

使用するので、これらをホワイトリストに登録する必要がある。

 

config/initializers/ ディレクトリ直下に

blocked_hosts.rb  ファイルを新規作成し、

 

  Rails.application.configure do

         config.hosts << "example.com

         config.hosts << "baukis2.example.com"

     end 

 

と記入する。

もしホスト名の制限が不要であれば、

 config.hosts = nil 

のように設定して、Blocked Hosts を無効にすれば良い。