前提・実現したいこと
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
試したこと(順不同)
- ローカルと本番環境のMaster keyの記載確認 => 同じ
- pc再起動
- 本番環境のunicorn, nginx, mysql再起動
- コンソールでRails.application.credentials.awsの確認 => 表示あり
- env | grep ACCESSで確認 => 表示あり
- 本番環境で、sudo vim /etc/environmentを開き、変数名を小文字に(逆に全て大文字も) => 変わらずエラー
- application.scssをapllication.css.scssとしてみる => 変わらずエラー
- carrierwave.rbとimage_uploader.rbのif文をなくし、storage :fogに => 変わらずエラー
- environments/production.rbのconfig.assets.compile = trueをfalseに => 変わらずエラー
- deploy.rbにset :linked_files, fetch(:linked_files, []).push("config/master.key")を記載 => 変わらずエラー
- deploy/production.rbに記載している、%w{app db web}を%w{web}と%w{app db}の2行に => 変わらずエラー
- 本番環境の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を記載しているのですが、そちらもデプロイとは関係ない考えています。
ご教授のほどよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。