質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1260閲覧

Rails on Dockerを Heroku へデプロイ時に db:create が通らない

HayatoOkuma

総合スコア12

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1グッド

0クリップ

投稿2020/01/16 06:14

編集2020/01/16 06:18

現在docker-composeを用いてRailsアプリケーションを開発しており,
本番環境へのリリースとしてHerokuへのデプロイを行っている途中でエラーが発生している状態です.

やったこと

こちらのQiita記事herokuのdocsを参照しながら以下のコマンドを実行していきました.
ここまでは何のエラーもなく通っています.
(herokuへログイン済み)

bash

1$ heroku container:push web 2 3$ heroku container:release web 4 5$ heroku addons:create cleardb:ignite 6 7$ heroku config 8=== myapp Config Vars 9CLEARDB_DATABASE_URL: mysql://xxx 10 11$ heroku config:set DATABASE_URL='mysql2://xxx' 12Setting DATABASE_URL and restarting ⬢ myapp... done, v21 13DATABASE_URL: mysql2://xxx 14 15$ heroku config:set RAILS_ENV='production' 16Setting RAILS_ENV and restarting ⬢ myapp... done, v22 17RAILS_ENV: production

発生している問題

以上のコマンドに引き続きdb:createを実行した際に以下のエラーが発生しています.

$ heroku run rails db:create Running rails db:create on ⬢ myapp... up, run.9235 (Free) rails aborted! NameError: Cannot load database configuration: undefined local variable or method `root' for main:Object (erb):19:in `block in <main>' (erb):19:in `fetch' (erb):19:in `<main>' /usr/local/bundle/gems/railties-5.2.4.1/lib/rails/application/configuration.rb:172:in `database_configuration' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/railtie.rb:39:in `block (3 levels) in <class:Railtie>' /usr/local/bundle/gems/railties-5.2.4.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform' /usr/local/bundle/gems/railties-5.2.4.1/lib/rails/commands/rake/rake_command.rb:20:in `perform' /usr/local/bundle/gems/railties-5.2.4.1/lib/rails/command.rb:48:in `invoke' /usr/local/bundle/gems/railties-5.2.4.1/lib/rails/commands.rb:18:in `<main>' /usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require' /usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi' /usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' /usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi' /usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require' /usr/local/bundle/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:291:in `block in require' /usr/local/bundle/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:257:in `load_dependency' /usr/local/bundle/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:291:in `require' /katagami-ant/bin/rails:9:in `<top (required)>' /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `load' /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `call' /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/command.rb:7:in `call' /usr/local/bundle/gems/spring-2.1.0/lib/spring/client.rb:30:in `run' /usr/local/bundle/gems/spring-2.1.0/bin/spring:49:in `<top (required)>' /usr/local/bundle/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `load' /usr/local/bundle/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `<top (required)>' /katagami-ant/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>'

考えうる原因

/usr/local/bundle/gems/railties-5.2.4.1/lib/rails/application/configuration.rb:172:in `database_configuration'

エラーが発生したコードは以上の部分ということだったので, database_configurationについて調べてみると

Loads and returns the entire raw configuration of database from values stored in config/database.yml.

ということで, どうもconfig/database.ymlが怪しいと分かりました.
heroku configで設定した環境変数が読み込まれているかを確認するために,
initializers/の適当なファイルに以下を置いてみましたが問題ないようでした.

ruby

1p ENV['DATABASE_URL'] 2p ENV['RAILS_ENV']

bash

1$ heroku run rails db:create 2Running rails db:create on ⬢ myapp... up, run.2733 (Free) 3"mysql2://xxx" 4"production" 5rails aborted! 6NameError: Cannot load database configuration: 7undefined local variable or method `root' for main:Object 8...

関連のあるコード

  • docker-compose.yml

yml

1version: "3" 2services: 3 web: 4 build: . 5 command: /bin/sh -c "rm -f /myapp/tmp/pids/server.pid && bundle exec rails s -p '3001' -b '0.0.0.0'" 6 tty: true 7 stdin_open: true 8 # environment: 9 # - DATABASE=myapp_development 10 # - DATABASE_USER=root 11 # - DATABASE_PASSWORD=password 12 # - DATABASE_HOST=db 13 volumes: 14 - .:/katagami-ant 15 ports: 16 - 3001:3001 17 depends_on: 18 - db 19 - redis 20 21 db: 22 image: mysql:5.7 23 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci 24 environment: 25 - MYSQL_DATABASE=myapp_development 26 - MYSQL_ROOT_USER=root 27 - MYSQL_ROOT_PASSWORD=password 28 volumes: 29 - mysql_vol:/var/lib/mysql 30 ports: 31 - 3306:3306 32 33 redis: 34 image: redis 35 ports: 36 - 6379:6379 37 volumes: 38 - "./app/redis:/data" 39 40volumes: 41 mysql_vol:
  • config/database.yml

yml

1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 6development: 7 <<: *default 8 # username: <%= ENV.fetch("DATABASE_USER") { root } %> 9 # password: <%= ENV.fetch("DATABASE_PASSWORD") { password } %> 10 # host: <%= ENV.fetch("DATABASE_HOST") { db } %> 11 # database: <%= ENV.fetch("DATABASE") { katagami-ant_development } %> 12 13production: 14 <<: *default 15 url: <%= ENV['DATABASE_URL'] %> 16

実現したいこと

heroku run db:createを実行したい.

開発環境

$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.1 BuildVersion: 19B88 $ docker -v Docker version 19.03.1, build 74b1e89 $ docker-compose -v docker-compose version 1.24.1, build 4667896b
shinoharat👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

config/database.ymlにおいて,
username: <%= ENV.fetch("DATABASE_USER") { root } のrootをちゃんと文字列にしてなかったのが原因でした.

以下のように他の部分もクォーテーションで囲って実行すると上手くいきました.
コメントアウトが効いてないのかな...ちょっと謎いです...

ruby

1development: 2 <<: *default 3 # username: <%= ENV.fetch("DATABASE_USER") { 'root' } %> 4 # password: <%= ENV.fetch("DATABASE_PASSWORD") { 'password' } %> 5 # host: <%= ENV.fetch("DATABASE_HOST") { 'db' } %> 6 # database: <%= ENV.fetch("DATABASE") { 'katagami-ant_development' } %>

投稿2020/01/16 10:14

HayatoOkuma

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問