環境
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
初学者のため、情報不十分だと思います。申し訳ございませんが、必要な情報等あれば、即座に追加修正させていただきますので、ご回答いただけると幸いです。
何卒、よろしくお願いいたします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。