herokuへのデプロイエラー
参照した記事
上記の記事を参考にし、Ruby on RailsでTwitter認証機能を試していました。
開発環境ではうまく動いたので、本番環境でも試してみようとherokuへデプロイしようとしたところ、NoMethodError: undefined method `[]' for nil:NilClass
がでて失敗していまいます。
コードは、herokuにデプロイするためにデータベースをPostgreSQLにする操作をしたこと以外は、上の記事通りになっています。
Railsのバージョンは5.2.2
データベースはMySQLを使用しています。
仮想環境にvagrantを使っています。
以下にエラーと関係がありそうなコードを掲載します。
#ターミナル上のエラー表記 remote: To update, run `gem install bundler --pre` remote: -----> Installing node-v8.10.0-linux-x64 remote: -----> Detecting rake tasks remote: -----> Preparing app for Rails asset pipeline remote: Running: rake assets:precompile remote: rake aborted! remote: NoMethodError: undefined method `[]' for nil:NilClass remote: /tmp/build_d4d2abac033c865dd7cb763ab005c74a/config/initializers/devise.rb:260:in `block in <main>' remote: /tmp/build_d4d2abac033c865dd7cb763ab005c74a/vendor/bundle/ruby/2.5.0/gems/devise-4.5.0/lib/devise.rb:307:in `setup' remote: /tmp/build_d4d2abac033c865dd7cb763ab005c74a/config/initializers/devise.rb:5:in `<main>' . . . remote: ! remote: ! Precompiling assets failed. remote: ! remote: ! Push rejected, failed to compile Ruby app. remote: remote: ! Push failed remote: Verifying deploy... remote:
#initializers/devise.rb 260行目付近 # ==> OmniAuth # Add a new OmniAuth provider. Check the wiki for more information on setting # up on your models and hooks. # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' config.omniauth :twitter, Rails.application.credentials.twitter[:twitter_api_key], Rails.application.credentials.twitter[:twitter_api_secret], display: 'popup'
#database.yml production: adapter: postgresql encoding: unicode pool: 5 database: osd_production username: osd password: <%= ENV['OSD_DATABASE_PASSWORD'] %>
#Gemfile gem 'devise' gem 'omniauth-twitter' group :production do gem 'pg', '0.21.0' gem 'rails_12factor' end
試したこと
asetts/stylesheets/application.cssをapplication.css.scssに変更
config/application.rbの中にconfig.assets.initialize_on_precompile = falseを追加。
上のコードをproduction.rbにも書いてみる。
これらの操作ではエラー表記に変化はありませんでした。
それと、コードの意味はよく分かりませんが、下のコードを打ってみるようにと書かれた記事を見つけて試してみたので打ってみあっところ、エラーのようなものは出てきましたが解決方法までは書かれていなかったため、そこで止まっています。以下のような結果になりました(当該記事は見失ってしまいました)。
個人的にはここが怪しいのかなとも思いましたが、ターミナルで指摘されているエラー箇所のdevise.rbと関係がなさそうなので混乱しています。
postgresqlの読み込みに失敗しているようですが、いまいち意味が分かりません。
[vagrant@localhost osd]$ RAILS_ENV=production bundle exec rake assets:precompile rake aborted! LoadError: Error loading the 'postgresql' Active Record adapter. Missing a gem it depends on? pg is not part of the bundle. Add it to your Gemfile. /home/vagrant/Rails/osd/app/models/application_record.rb:1:in `<main>' /home/vagrant/Rails/osd/app/models/user.rb:1:in `<main>' /home/vagrant/Rails/osd/config/routes.rb:4:in `block in <main>' /home/vagrant/Rails/osd/config/routes.rb:1:in `<main>' /home/vagrant/Rails/osd/config/environment.rb:5:in `<main>' /home/vagrant/.rbenv/versions/2.5.3/bin/bundle:23:in `load' /home/vagrant/.rbenv/versions/2.5.3/bin/bundle:23:in `<main>' Caused by: Gem::LoadError: pg is not part of the bundle. Add it to your Gemfile. /home/vagrant/Rails/osd/app/models/application_record.rb:1:in `<main>' /home/vagrant/Rails/osd/app/models/user.rb:1:in `<main>' /home/vagrant/Rails/osd/config/routes.rb:4:in `block in <main>' /home/vagrant/Rails/osd/config/routes.rb:1:in `<main>' /home/vagrant/Rails/osd/config/environment.rb:5:in `<main>' /home/vagrant/.rbenv/versions/2.5.3/bin/bundle:23:in `load' /home/vagrant/.rbenv/versions/2.5.3/bin/bundle:23:in `<main>' Tasks: TOP => environment (See full trace by running task with --trace)
最近はじめてvagrantでローカル環境の構築を行ったため、開発環境自体に不具合があるのではとも考えましたが、その問題をどうやって特定すればよいのかわかりません。
ご助力をお願いいたします。
回答1件
あなたの回答
tips
プレビュー