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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

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

Capistrano

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

Q&A

解決済

1回答

1105閲覧

capistrano deploy時エラー ActiveSupport::MessageEncryptor::InvalidMessageについて

Hitokiyo-

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

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

Capistrano

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

0グッド

0クリップ

投稿2021/03/13 06:08

編集2021/03/14 08:05

環境

ruby '2.5.8'
rails '5.2.4.5'
docker '20.10.0'
docker-compose '1.27.4'
capistrano '3.16.0'
puma '3.12.6'
devise '4.7.2'
circleci '2.1'
nginx
aws
###前提
railsアプリをdocker環境で構築して、git pushでcircleciを起動し、capistranoでAWSに自動デプロイという流れで開発したいです。

実現したいこと

capistranoで本番環境のデプロイをしたい。

bundle exec cap prouction deploy

上記コマンドを実行したところ、deploy:assets:precompileの段階で表題にあるエラーが発生し解決できずにいます。

エラーメッセージ

00:25 deploy:assets:precompile 01 $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile 01 rake aborted! 01 ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessage 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/message_encryptor.rb:206:in `rescue in _decrypt' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/message_encryptor.rb:183:in `_decrypt' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/message_encryptor.rb:157:in `decrypt_and_verify' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/messages/rotator.rb:21:in `decrypt_and_verify' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/encrypted_file.rb:79:in `decrypt' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/encrypted_file.rb:42:in `read' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/encrypted_configuration.rb:21:in `read' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/encrypted_configuration.rb:33:in `config' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/encrypted_configuration.rb:38:in `options' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/core_ext/module/delegation.rb:271:in `method_mis… 01 /var/www/School-Seach/releases/20210313030637/config/initializers/devise.rb:274:in `block in <top (required)>' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/devise-4.7.2/lib/devise.rb:307:in `setup' 01 /var/www/School-Seach/releases/20210313030637/config/initializers/devise.rb:11:in `<top (required)>' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/bootsnap-1.7.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/bootsnap-1.7.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/activesupport-5.2.4.5/lib/active_support/dependencies.rb:285:in `block in load'   〜省略〜 01 /var/www/School-Seach/releases/20210313030637/config/environment.rb:5:in `<top (required)>' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/bootsnap-1.7.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/bootsnap-1.7.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in re… 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/bootsnap-1.7.2/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'       〜省略〜 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/railties-5.2.4.5/lib/rails/application.rb:520:in `block in run_tasks_blocks' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/sprockets-rails-3.2.2/lib/sprockets/rails/task.rb:61:in `block (2 levels) in define' 01 /var/www/School-Seach/shared/bundle/ruby/2.5.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>' 01 /home/hiroki/.rbenv/versions/2.5.8/bin/bundle:23:in `load' 01 /home/hiroki/.rbenv/versions/2.5.8/bin/bundle:23:in `<main>' 01 Caused by: 01 ArgumentError: invalid base64 〜省略〜

試したこと

上記のエラー分から調べてみたところ、credentials.myl.encとmaster.keyの整合性が無いことからエラーが起きるという情報を得たので、対象のファイルの内容が合っているか確認しました。

・ローカル環境のファイルを確認する。
→それぞれ、app/config配下にあり、確認。

・サーバー環境のファイルを確認する。
→appディレクトリからfindコマンドで対象ファイルを洗い出し全て確認。↓

[ユーザー@ip*** School-Seach]$ find ./ -name credentials.yml.enc ./config/credentials.yml.enc ./shared/config/credentials.yml.enc ./releases/20210306051608/config/credentials.yml.enc [ユーザー@ip*** School-Seach]$ find ./ -name master.key ./config/master.key ./shared/config/master.key ./releases/20210306051608/config/master.key

それぞれrails consoleで確認したら、値は記述通りの値が返って来ます。

上記ファイルを全てローカルと合わせましたが、エラーは変わりませんでした。

検索を続けていると、本件のエラーの発火原因がそれぞれのサイトで違ったため、状況を再現しそれも試してみました。

・EDITOR=vim rails credentials:editコマンドで本件と同じエラーが出る。
→これは、問題なくvimエディタに入れたため、問題ないと思っております。

・rails serverコマンドで本件と同じエラーが出る。
→これも問題なく起動しました。

・docker-compose exec web bin/rails credentilas:edit
→これはローカル、サーバーともに問題なく起動しました。

・ローカルpcの再起動
・dockerイメージをdownして、再構築
・サーバー環境でnginxとmysqldの再起動
###試していいのかわからないこと
今回のエラー文を見てみてみると、どうやら01 /var/www/School-Seach/releases/20210313030637/config/initializers/devise.rb:274:がうまく起動していないことがわかりました。
omniauthで外部API(facebook,twitter)を使用してログインしたかったので、紐付けをするためにIDとsecret_keyをcredentials.yml.encに格納し、その環境変数を記述しております。ただ、秘匿情報だと思うのでそのままベタ書きは控えた方がいいと思っています。

補足情報

config/deploy/production.rb

server '**.***.***.**', user: 'ssh接続ユーザー', roles: %w{app db web} set :ssh_options, { keys: '~/.ssh/circleciにssh接続後のid_rsa', forward_agent: true, auth_methods: %w(publickey) }

config/deploy.rb

# config valid for current version and patch releases of Capistrano lock "~> 3.16.0" set :application, "School-Seach" set :repo_url, "git@github.com:ユーザー/School-Seach.git" set :branch, "main" set :deploy_to, "/var/www/School-Seach" set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/master.key', 'config/credentials.yml.enc', 'config/puma.rb') set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system') set :keep_releases, 5 set :rbenv_ruby, "2.5.8" set :log_level, :debug namespace :deploy do desc "Make sure local git is in sync with remote." task :confirm do on roles(:app) do puts "This stage is '#{fetch(:stage)}'. Deploying branch is '#{fetch(:branch)}'." puts 'Are you sure? [y/n]' ask :answer, 'n' if fetch(:answer) != 'y' puts 'deploy stopped' exit end end end desc 'Initial Deploy' task :initial do on roles(:app) do invoke 'deploy' end end desc "Restart Application" task :restart do on roles(:app), in: :sequence, wait: 5 do invoke 'puma:restart' end end desc 'upload master.key' task :upload do on roles(:app) do |_host| execute "mkdir -p #{shared_path}/config" if test "[ ! -d #{shared_path}/config ]" end end before :starting, :confirm end

Capfile

require "capistrano/setup" require "capistrano/deploy" require "capistrano/scm/git" install_plugin Capistrano::SCM::Git require 'capistrano/rbenv' require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' require 'capistrano/puma' install_plugin Capistrano::Puma Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

config/initializers/devise.rb

Devise.setup do |config| 〜省略〜 config.omniauth :facebook, Rails.application.credentials.facebook[:key], Rails.application.credentials.facebook[:secret] config.omniauth :twitter, Rails.application.credentials.facebook[:key], Rails.application.credentials.facebook[:secret] OmniAuth.config.logger = Rails.logger if Rails.env.development? end

.circleci/config.yml

version: 2.1 jobs: build: 〜省略〜 - add_ssh_keys: fingerprints: - "circleciからawsにssh接続するためのid_rsaを登録したフィンガープリント。" - deploy: name: Capistrano deploy command: | if [ "${CIRCLE_BRANCH}" != "main" ]; then exit 0 fi eval `ssh-agent` && ssh-add ~/.ssh/id_rsa* && bundle exec cap production deploy

初学者のため、情報不十分だと思います。申し訳ございませんが、必要な情報等あれば、即座に追加修正させていただきますので、ご回答いただけると幸いです。
何卒、よろしくお願いいたします!

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
結論からいうと、config/deploy.rbに記載していた、deploy設定が間違っていました。
config/deploy.rb

namespace :deploy do desc "Make sure local git is in sync with remote." task :confirm do on roles(:app) do puts "This stage is '#{fetch(:stage)}'. Deploying branch is '#{fetch(:branch)}'." puts 'Are you sure? [y/n]' ask :answer, 'n' if fetch(:answer) != 'y' puts 'deploy stopped' exit end end end desc 'Initial Deploy' task :initial do on roles(:app) do invoke 'deploy' end end desc "Restart Application" task :restart do on roles(:app), in: :sequence, wait: 5 do invoke 'puma:restart' end end before :starting, :confirm end

という形で変更したところ、正常にdeployが成功しました。
コピペをしてしまっていた部分でしたので、原因が未だ掴めておりません。申し訳ございません。。
それに、重要なところを質問本文では省略してしまっているという、、、。(編集して全文載せました。)
いかに勉強不足かが、身に染みました。

投稿2021/03/14 08:06

Hitokiyo-

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問