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

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

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

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Amazon S3

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

AWS(Amazon Web Services)

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

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

解決済

1回答

1741閲覧

deploy実行後のrake assets:precompileにおけるundefined method `[]' for nil:NilClass

gyokuro

総合スコア2

Ruby on Rails

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Amazon S3

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

AWS(Amazon Web Services)

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

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

0クリップ

投稿2020/06/26 10:23

前提・実現したいこと

DBはEC2を利用し、AWSのS3のバケットに画像投稿の紐づけをしたアプリを作成しています。
A3関連付け前のデプロイは成功し、A3を関連付けてからのデプロイでエラーが発生し、解決できずいます。
コマンドはbundle exec cap production deployです。
自分なりにインターネットで検索し対応しましたが、解決できずにいるので、お力を貸していただければと思います。
質問の方法、内容に至らない点がありましたら申し訳ないですが、お願いします。

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

AILS_GROUPS="" ; $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile ) DEBUG [40f0c6b5] rake aborted! DEBUG [40f0c6b5] NoMethodError: undefined method `[]' for nil:NilClass DEBUG [40f0c6b5] /var/www/tooling-ptr/releases/20200626082017/config/initializers/carrierwave.rb:13:in `block in <top (required)>' /var/www/アプリ名/shared/bundle/ruby/2.5.0/gems/carrierwave-2.1.0/lib/carrierwave/uploader/configuration.rb:174:in `configure' /var/www/アプリ名/shared/bundle/ruby/2.5.0/gems/carrierwave-2.1.0/lib/carrierwave.rb:14:in `configure' /var/www/アプリ名/releases/20200626082017/config/initializers/carrierwave.rb:5:in `<top (required)>'

上記の通り、arrierwave.rbに記載されているaccess_key_idが反映されていない、読み込まれていないことが
原因と考え、様々なサイト記事を頼りに下記の通り試してみました。

該当のソースコード

config/initializers/carrierwave.rb

require 'carrierwave/storage/abstract' require 'carrierwave/storage/file' require 'carrierwave/storage/fog' CarrierWave.configure do |config| if Rails.env.development? || Rails.env.test? config.storage = :file else 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 = 'バケット名入力済み' config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/バケット名入力済み' end end

unicorn.rb

worker_processes 1 working_directory "#{app_path}/current" pid "#{app_path}/shared/tmp/pids/unicorn.pid" listen "#{app_path}/shared/tmp/sockets/unicorn.sock" stderr_path "#{app_path}/shared/log/unicorn.stderr.log" stdout_path "#{app_path}/shared/log/unicorn.stdout.log" timeout 60 preload_app true GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true check_client_connection false run_once = true before_fork do |server, worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect! if run_once run_once = false # prevent from firing again end old_pid = "#{server.config[:pid]}.oldbin" if File.exist?(old_pid) && server.pid != old_pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH => e logger.error e end end end after_fork do |_server, _worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection end

config/deploy.rb

lock '3.14.1' set :application, 'アプリ名' set :repo_url, 'git@github.com:リポジトリ名記載済み.git' set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads') set :linked_files, fetch(:linked_files, []).push("config/master.key") set :rbenv_type, :user set :rbenv_ruby, '2.5.1' set :ssh_options, auth_methods: ['publickey'], keys: ['~/.ssh/pem名記載済み.pem'] set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" } set :unicorn_config_path, -> { "#{current_path}/config/unicorn.rb" } set :keep_releases, 5 set :linked_files, %w{ config/master.key } after 'deploy:publishing', 'deploy:restart' namespace :deploy do task :restart do invoke 'unicorn:stop' invoke 'unicorn:start' end desc 'upload master.key' task :upload do on roles(:app) do |host| if test "[ ! -d #{shared_path}/config ]" execute "mkdir -p #{shared_path}/config" end upload!('config/master.key', "#{shared_path}/config/master.key") end end before :starting, 'deploy:upload' after :finishing, 'deploy:cleanup' end

試したこと(順不同)

  1. ローカルと本番環境のMaster keyの記載確認 => 同じ
  2. pc再起動
  3. 本番環境のunicorn, nginx, mysql再起動
  4. コンソールでRails.application.credentials.awsの確認 => 表示あり
  5. env | grep ACCESSで確認 => 表示あり
  6. 本番環境で、sudo vim /etc/environmentを開き、変数名を小文字に(逆に全て大文字も) => 変わらずエラー
  7. application.scssをapllication.css.scssとしてみる => 変わらずエラー
  8. carrierwave.rbとimage_uploader.rbのif文をなくし、storage :fogに => 変わらずエラー
  9. environments/production.rbのconfig.assets.compile = trueをfalseに => 変わらずエラー
  10. deploy.rbにset :linked_files, fetch(:linked_files, []).push("config/master.key")を記載 => 変わらずエラー
  11. deploy/production.rbに記載している、%w{app db web}を%w{web}と%w{app db}の2行に => 変わらずエラー
  12. 本番環境のDBのリセット => 作成時に本件と同じNiclassのエラーが出る

思い出せることは以上です。
参考にさせていただいた記事のURLは割愛させていただきます。

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

ruby 2.5.1
Bundler version 2.1.4
capistrano (3.14.1)
carrierwave (2.1.0)
A3
EC2
Github

以上です。
A3と連結させたのちにデプロイがうまくいかなくなったので、そこでなにかおかしな設定をしたのかもしれないと
commitを見直しましたが、おかしなところはないと判断しています。
gitignoreにcredentials.yml.encを記載しているのですが、そちらもデプロイとは関係ない考えています。

ご教授のほどよろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

credentials.yml.encを.gitignoreに入れていたのが原因でした。
.gitignoreから外すと無事デプロイが最後までうまく走りました。

個人的な見解としては、.gitignore内にてcredentials.yam.encを消すと、
credentials.yaml.encの内容が書き変わり、有効になっているような動きをしていたので、
良かれと思った.gitignoreへの記載が裏目に出たようです。
引き続きデプロイ作業を続けます。
お騒がせしました。

投稿2020/06/26 17:33

gyokuro

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問