DockerでRuby on Rails環境構築【Windows11】

手順

①色々インストール

②色々コマンド実行

mkdir neko //ディレクトリ作成
cd neko  //ディレクトリに移動
git config --global core.autocrlf input  //改行コード自動変換をOFF
git clone リポジトリのURL  //リポジトリをclone
git branch //branchを確認
git checkout -b neko/nyan //branch作成&checkout
docker compose up --build //コンテナ立ち上げ
vim .env //.envファイル作成
<<環境変数の設定>>
Dotenv.load  //環境変数の読み込み
<<.gitignoreファイルに.envを追記>>
ENV['設定したKEY']  //環境変数の設定を確認
docker compose exec コンテナ名 bin/コンテナ名 rails c  //Ruby Consoleの立ち上げ

Docker Compose時のstandard_init_linux.go:211: exec user process caused “no such file or directory" エラー

エラーの原因:各ファイルの改行コードがWindows標準の"CRLF"となっているため、Linuxで正常に読み込みができない状態となっている。

改行コードがおかしくなる原因:Windows環境でgit cloneコマンドを実行すると、ファイルの改行コードが"CRLF"に自動変換されてしまうため。

エラーの解消方法:(ディレクトリ・Dockerコンテナを作成済の場合は削除の上、)git clone前に下記コードを実行して、改行コード自動変換設定をオフにする。

Docker Compose時のDocker standard_init_linux.go:228: exec user process caused: no such file or directoryエラー

同上

Ruby Console立ち上げ時のthe development database is not configured for the development environmentエラー

可能性1:database.ymlファイル自体がない

 →config配下にdatabase.ymlを作成する

可能性2:database.ymlはあるが、developmentに関する記述がない

 →database.ymlにdevelopmentに関する記述を追加する

コード例↓

default: &default
  adapter: postgresql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  encoding: utf8
  username: postgres
  password: postgres
  host: db

development:
  <<: *default
  database: MyApp_development

test:
  <<: *default
  database: MyApp_test


production:
  <<: *default
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

Ruby Console立ち上げ時のcould not connect to server: Connection refusedエラー

推定される原因: database.yml内のhost名がdocker-compose.ymlで定義されているDB用コンテナ名と同一ではない(ため、代わりにRailsがローカルホストのDBへの接続を試行し、参照先が見つからずエラーとなっている)

 → database.yml内のhost名をdocker-compose.ymlで定義されているDB用コンテナ名と一致させる。

ENV['KEY’] 時に中身がNilになる問題

可能性1:.envファイル内で当該のKEY(と値のペア)が設定できていない

 →vimで中身を編集&保存する

可能性2:設定した.envをRailsでloadできていない

 →Dotenv.loadを実行する

Ruby Console上でのメソッド実行時のRails: NameError: uninitialized constantエラー

推定される原因:新しく作成したメソッドをrailsに読み込めていない

 →コンソール上でreload!を実行して、再度メソッドを呼び出す

Other

Posted by regardie