現在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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。