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

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

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

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

Amazon EC2

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

Q&A

解決済

1回答

1144閲覧

RailsアプリでUnicornが起動しない。

T.Adams

総合スコア40

Ruby on Rails 6

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

Amazon EC2

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

0グッド

1クリップ

投稿2020/03/15 15:01

編集2020/03/16 11:54

前提・実現したいこと

RailsアプリでUnicornを動かし、ブラウザでアプリを起動したいです。様々トライしましたが、手詰まりになってしました。何かわかる方いらっしゃいましたら、ご教授いただけたら幸いです。

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

Unicornサービスを起動するために、以下のコマンドを実行しました。スタートに失敗したので、ログで詳細を見てくれとのことでしたので確認しました。

$ unicorn_rails -c /var/www/rails/Myapp/config/unicorn.conf.rb -D -E production master failed to start, check stderr log for details

すると、2つのエラーが確認できました。

1つ目のログエラー

/home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/message_encryptor.rb:193:in `key=': key must be 16 bytes (ArgumentError)

2つ目のログエラー

/home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/runtime.rb:312:in `check_for_activated_spec!': You have already activated unicorn 5.5.3, but your Gemfile requires unicorn 5.4.1. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)

Gemfileが要求するunicorn 5.4.1に対して、あなたの環境でアクティブなのはUnicorn5.5.3だと記載があります。

他のエラー

bundler: failed to load command: unicorn_rails (/home/testuser/.rbenv/versions/2.6.3/bin/unicorn_rails) ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessage /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/message_encryptor.rb:206:in `rescue in _decrypt' /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/message_encryptor.rb:183:in `_decrypt' /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/message_encryptor.rb:157:in `decrypt_and_verify' /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/messages/rotator.rb:21:in `decrypt_and_verify' /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/encrypted_file.rb:80:in `decrypt' /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/encrypted_file.rb:43:in `read' /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/encrypted_configuration.rb:21:in `read' /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/encrypted_configuration.rb:33:in `config' /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/encrypted_configuration.rb:38:in `options' /home/testuser/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-6.0.2.1/lib/active_support/core_ext/module/delegation.rb:297:in `method_missing' (erb):12:in `<main>'

試したこと

1つ目のログのエラー関しては、「アセットプリコンパイル中のRails 5.2.2では、エラーキーは16バイトでなければなりません」を参考に、config/master.keyとcredentials.yml.encを一旦リネイムし、EDITOR="vi" bin/rails credentials:editを実行していますが、master failed to start.....は依然出たままです。key must be 16 bytesと記載がありますが、この条件を満たすキーは発行できていないのが原因なのでしょうか。

2つ目のログのエラーに関しては、bundle execを付与して実行しましたが、結果変わらずです。類似の問題がQiitaに投稿されており、参考にしました。Gemfileでバージョンの指定をしていなかったUnicronに対して、5.4.1のバージョンを指定しました。ただし、最初に検出されたmaster failed to start.....は依然出たままです。

1つ目にも関連しますが、message_encryptor.rb:203-207行目を引用です。

message = Messages::Metadata.verify(decrypted_data, purpose) @serializer.load(message) if message rescue OpenSSLCipherError, TypeError, ArgumentError raise InvalidMessage end

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

  • Rials 6.0.2.1
  • Ruby 2.6.3
  • unicorn 5.4.1
  • OS : Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type

Amazon Linux AMI は、AWS がサポートする EBS-backed イメージです。デフォルトのイメージには、AWS コマンドラインツール、Python、Ruby、Perl、および Java が含まれます。レポジトリには、Docker、PHP、MySQL、PostgreSQL、およびその他のパッケージが含まれます。

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

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

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

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

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

guest

回答1

0

自己解決

解決方法

正しい方法かわかりませんが、どうしてもEC2に自作のアプリをアップロードするという経験をしてみたかったので、様々なサイトを参考に、以下を実施しました。

# 以下を追記 message_encryptor.rbの120行目あたり secret = SecureRandom.hex(16)

調査のプロセス

[前提]
上記のエラーが出た際、私はUnicorn.log内を"Error"という文字列でGrepして検索を開始しました。しかしよく見てみるとErrorという明確な文字列でなくでもInvalidなどのキーワードが記載されているところはたくさんありました。なので、"他のエラー"にも記載の部分を見ていることにしました。

  1. message_encryptor.rbでエラーが多い

なぜかこのファイルでエラーが散在している。なんとなくここから見てみるべきかなと直感と、logファイルの冒頭に記載の内容が"他のエラー"の部分だったので、ここからググる。以下の文献にたどり着く。

ActiveSupport::MessageEncryptorを慎重に使う

現象は同じっぽい。対処方法も記載があるが、分量が多いなあと笑
内部のリンクに以下があったので一応目を通す。

Fix default key length on cipher

ここに記載の方法を一旦試してみようと考える。"1つ目のログエラー"にも記載したが、keyが16バイト以上で作成されているから、16バイト以下にして!ってのがエラーの内容なんだから、正しいよねと。

# 以下を追記 message_encryptor.rbの120行目あたり # 最初はinitializeメソッド内の@secret = secretを修正し、@secret = SecureRandom.hex(16)としたが、これだと、"master failed to start...."のエラーが出てしまったのです。この辺の理屈は未だに理解できていない。Initializeメソッドはコンストラクタみたいな役割で最初に通過するのであれば、120行目あたりでこれしても、16バイトが反映されるのかなくらいでしか理解していません。 @secret = SecureRandom.hex(16)

これで以下を実行したあと、IPアドレスを指定してブラウザからアクセスできました。

Bash

1bundle exec unicorn_rails -c /var/www/rails/Myapp/config/unicorn.conf.rb -D -E production

投稿2020/03/17 13:45

編集2020/03/17 13:47
T.Adams

総合スコア40

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問