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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

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

Q&A

解決済

1回答

4089閲覧

herokuへデプロイできない

rails24211493

総合スコア12

Ruby on Rails 5

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

0グッド

0クリップ

投稿2018/12/13 06:56

編集2018/12/13 07:12

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でローカル環境の構築を行ったため、開発環境自体に不具合があるのではとも考えましたが、その問題をどうやって特定すればよいのかわかりません。

ご助力をお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/12/13 07:03

initializers/devise.rb 260行目付近の config.omniauth :twitter, Rails.application.credentials.twitter[:twitter_api_key], Rails.application.credentials.twitter[:twitter_api_secret], display: 'popup' っていうのは何処かのサイトか何かからのコピペですか?
guest

回答1

0

ベストアンサー

ruby

1Rails.application.credentials.twitter[:twitter_api_key]

にはtwitter_api_keyを

ruby

1Rails.application.credentials.twitter[:twitter_api_secret]

にはtwitter_api_secretを記述する必要があります。

ruby

1Rails.application.credentials.twitter[:twitter_api_key] 2Rails.application.credentials.twitter[:twitter_api_secret]

これらはその旨を伝えるためのもので、これを書いたからといって動くものではありません。

追記

...と思ったらここで設定してましたね。

bash

1$ EDITOR="vim" bin/rails credentials:edit

yml

1# credentials.yml.enc 2twitter: 3 twitter_api_key: API keyを入力 4 twitter_api_secret: API secret keyを入力 5 6# aws: 7# access_key_id: 123 8# secret_access_key: 345

ここがうまく設定できていないのでは?

追記

credentials.yml.encを利用する場合、デプロイ前に環境変数をセットする必要があるようです。
以下に詳しく書かれているので参考にしてみてください。
secrets.ymlや環境変数をRails 5.2のEncrypted Credentialsに移行する

bash

1$ heroku config:set RAILS_MASTER_KEY=`cat config/master.key`

投稿2018/12/13 07:13

編集2018/12/13 07:35
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

rails24211493

2018/12/13 07:19

ご回答ありがとうございます。 ですが、ご指摘の点については問題ないかと思います。 credentials.yml.encに二つのkeyを書いてあり、実際に開発環境ではうまくtwitterと連携ができていますので……
rails24211493

2018/12/13 07:47

丁寧なご回答ありがとうございます! 質問のエラーは消えましたが、また別のエラーが出てしまったので、また格闘してみようと思います。 本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問