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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Heroku

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

Ruby on Rails

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

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

解決済

herokuデプロイでrake assets:precompileの失敗(NoMethodError)

Lernen
Lernen

総合スコア4

Heroku

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

Ruby on Rails

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

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

1回答

0評価

0クリップ

476閲覧

投稿2020/03/20 10:51

編集2020/03/22 12:20

前提・実現したいこと

この度は宜しくお願いします。

heroku+carrierwave+S3にてデプロイを行おうとし、以下のコマンドを実行しました。

git push heroku master

発生している問題・エラーメッセージ

エラーは、途中で発生したものはこちら

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_5a651971b2df337d5a7aadd064b90937/config/initializers/carrierwave.rb:11:in `block in <top (required)>'

最終的に赤字で書かれていたのはこちら

remote: ! remote: ! Precompiling assets failed. remote: ! remote: ! Push rejected, failed to compile Ruby app. remote: remote: ! Push failed remote: Verifying deploy... remote: remote: ! Push rejected to appname. remote: To https://git.heroku.com/appname.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'https://git.heroku.com/appname.git'

となります。

該当のソースコード

carrierwave.rb

require 'carrierwave/storage/abstract' require 'carrierwave/storage/file' require 'carrierwave/storage/fog' CarrierWave.configure do |config| if Rails.env.production? config.storage = :fog config.fog_provider = 'fog/aws' config.fog_credentials = { provider: 'AWS', aws_access_key_id: Rails.application.credentials.aws[:access_key_id], aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key], region: 'ap-northeast-1' } config.fog_directory = 'S3のバケット名' config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/S3のバケット名' else config.storage :file config.enable_processing = false if Rails.env.test? end CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:].\-+]/ end

試したこと

エラー文から、環境変数が上手く読み込めていないのではと考えました。
・(念のため)ローカル環境にaws_access_key_id, aws_secret_access_keyをexport 環境変数=値で記述
・credentials.ymlにも環境変数=値で記述
(コンソールでRails.application.credentials.aws[:access_key_id]と入れたところ、期待通りの値が出ました。シークレットキーも同様です)
・ターミナルからheroku configでRAILS_MASTER_KEY, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_S3_REGION, AWS_S3_BUCKET, 以上の環境変数を定義、herokuダッシュボードのConfig Varsでも確認

環境変数定義は行えていると思うのですが、それでも同様のエラーが続き、お邪魔しました。
ご助力いただけますと幸いです。

補足情報(FW/ツールのバージョンなど)

Rubyは5.2系、bundlerは2.0.2、データベースは

Gemfile

group :development, :test do gem 'mysql2', '>= 0.4.4', '< 0.6.0' end group :production do gem 'pg' end

という設定になっています。検索の際cssをscssにリネームするのいうのも見かけたのですが、今回、cssファイルは使用しておりません(application.scss以下全てscssファイル)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hoshi-takanori

2020/03/23 05:22

Rails よく分かりませんが、carrierwave.rb の 11 行目って「Rails.application.credentials.aws[:access_key_id]」の部分だと思いますが、これは環境変数ではなく credentials.yml.enc とかいうファイルで指定するものなのでは。 https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39
Lernen

2020/03/23 05:28

ご覧いただきありがとうございます!おっしゃる通り11行目は「Rails.application.credentials.aws[:access_key_id]」なのですが、credentials.ymlには値を記述しています(試したことの中にあります通り、コンソールで「Rails.application.credentials.aws[:access_key_id]」と入れると期待した値が返ってきました) また、そのcredentials.ymlを読めるように、マスターキーを環境変数=値という形でheroku configにも記載しています。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Heroku

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

Ruby on Rails

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

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。