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

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

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

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

Ruby

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

Q&A

解決済

1回答

3413閲覧

sudoをつけなければ、ActiveSupport::MessageEncryptor::InvalidMessage  となってしまう。

divclass123

総合スコア35

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2022/02/04 15:56

編集2022/02/05 18:46

前提

「Everyday Rails - RSpecによるRailsテスト入門」という教材をやっており、

git clone git@github.com:JunichiIto/everydayrails-rspec-jp-2022.git

教材のコード
ここからcloneしています。

下記の教材のサンプルは実際に私が実行してきたことが載っていて、サンプルの箇所しかまだ進めていないので、もしかしたら参考になるかもしれないですが、一応下記の記述だけで事足りるようにしてるつもりです。
https://leanpub.com/everydayrailsrspec-jp/read_sample

質問の概要

# ソースコードのダウンロード git clone git@github.com:JunichiIto/everydayrails-rspec-jp-2022.git # ディレクトリの移動 cd everydayrails-rspec-jp-2022 # 使用する Ruby バージョンを指定(本書では3.1.0を推奨。下記コマンドは rbenv を使用する場合) rbenv local 3.1.0 # gem のインストール bundle install # データベースのセットアップ等 bin/setup # JavaScript パッケージのインストール yarn install # foreman gem のインストール gem install foreman # サーバーの起動 bin/dev

が教材に書いてあったセットアップ時のコマンドです。
その中の

# データベースのセットアップ等 bin/setup

bin/setupの内容

# サーバーの起動 bin/dev

bin/devの内容

を実行した際に、

ActiveSupport::MessageEncryptor::InvalidMessage (ActiveSupport::MessageEncryptor::InvalidMessage)
とエラーが出てしまいました。
ネットで、 credentials.yml.enc,master.keyが合わないときに出るエラーとありました。

gitの教材のコードにはmaster.keyがないので当たり前ですね。

そこで、 credentials.yml.enc,master.keyを作り直したら上記のエラーは解決されると考えました。

なので、

rm config/master.key
credentials.yml.enc
sudo EDITOR="vi" bin/rails credentials:edit

を実行しました。
credentials.yml.enc,master.keyが作られました。

ネットの記事でも上記のような手順で
ActiveSupport::MessageEncryptor::InvalidMessage (ActiveSupport::MessageEncryptor::InvalidMessage)
を解決していたので、これで解決できるだろうと思いましたが、
再度

# データベースのセットアップ等 bin/setup
# サーバーの起動 bin/dev

を実行しても同じエラーがでました。

エラー全文(文字数の関係で無駄なリンクを踏ませてしまいます。申し訳ございません。)

しかし、sudoをつけると問題なくサーバーが起動しました。

試したこと

sudoをつけると問題なく起動するので、なにか権限がおかしいのではないかと思いました。

鍵を作るときに、

sudo EDITOR="vi" bin/rails credentials:edit

sudoでcredentials.yml.enc,master.keyを作っているので
作られたファイルの所有権がrootでした。
なので、サーバーを立ち上げる際に、sudoをいちいち実行しないといけなかったのではと考えました。

そこでchomdで権限を最大権限の777にして、ユーザーも他のディレクトリ同様に、ユーザーの所有者をsoichirohara にしました。

8 -rwxrwxrwx 1 soichirohara staff 464 2 4 21:55 credentials.yml.enc 8 -rwxrwxrwx 1 soichirohara staff 32 2 4 21:55 master.key

そしてこのようになりました。。
しかし同様に、
ActiveSupport::MessageEncryptor::InvalidMessage (ActiveSupport::MessageEncryptor::InvalidMessage)

とエラーが起こってしまいました。
鍵も新たに生成して、権限も最大権限を付与したにも関わらず
このようなエラー出てしまうのは他にどんな原因があるのかがわかりませんでした。
長くなってしまいましたが、なぜこのようなエラーが起きてしまうのか教えてくだされば幸いです。
というかそもそもみなさんは、他の方のリポをgit cloneするときに
鍵の再生性をしたり、なにかコマンドを打つたびsudoとかをやったりするのでしょうか?
分かりづらいとこがありましたら厳しく指摘していただければ幸いです。

補足

soichirohara@SoichironoMacBook-Pro bin % ls -la total 40 drwxr-xr-x 7 soichirohara staff 224 1 31 22:50 . drwxrwxrwx 30 soichirohara staff 960 2 5 00:01 .. -rwxr-xr-x 1 soichirohara staff 2975 1 31 22:50 bundle -rwxr-xr-x 1 soichirohara staff 150 1 31 22:50 dev -rwxr-xr-x 1 soichirohara staff 141 1 31 22:50 rails -rwxr-xr-x 1 soichirohara staff 90 1 31 22:50 rake -rwxr-xr-x 1 soichirohara staff 1010 1 31 22:50 setup

bin配下の権限はこんな感じです。見た感じ問題なさそうに思えます。

drwxrwxrwx 30 soichirohara staff 960 2 5 00:01 everydayrails-rspec-jp-2022

アプリのディレクトリ自体の権限にもchmod 777を付与しました。

https://qiita.com/divclass123/items/a52fea9caa062138b150
上記の記事は、セットアップに詰まったこととその対処法を簡単に載せています。
簡単にやったことを羅列しただけなので上記の記述で事足りると思います。

EDITOR="vi" bin/rails credentials:edit

だとマスターキーが作られませんでした。

環境

mac Monterey,,ruby 3.1.0p,Rails 7.0.1 , dockerとかVMではなくいわゆる普通の環境です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

「Everyday Rails - RSpecによるRailsテスト入門」翻訳者の伊藤です。本書をお読みいただきどうもありがとうございます。

こちらの質問は以前Qiitaで書かれていた件の続編ですね。
bin/dev実行時のスタックトレースを載せていただきどうもありがとうございます。

ただ、Qiitaは「便利なメモ置き場」ではありません。
こういった用途ではQiitaではなくGistを使いましょう。
Qiitaの記事は削除して、Gistのリンクに本文を付け替えてください。

ところで本題ですが、スタックトレースを眺めて少し状況を調べてみました。
相変わらず僕の手元では再現しないのですが、いろいろ調べる中で1点怪しそうな原因を思いつきました。
それは環境変数です。

Railsはcredentialファイルを暗号化するためのマスターキーにconfig/master.keyか環境変数ENV["RAILS_MASTER_KEY"]を使用します。

Rails セキュリティガイド - Railsガイド

もしかすると次のようなコマンドで実行するとbin/devが起動したりしませんか?

RAILS_MASTER_KEY= bin/dev

これでもし動くようであれば、どこかで環境変数が設定されている可能性が高いです。
以下のコマンドをターミナルで実行して、環境変数の設定値を確認してください。

echo $RAILS_MASTER_KEY

もし環境変数が設定されているようであれば、どこで設定したのかを思い出して、適切に対処してください。
これは僕の雑な推測ですが、cat ~/.zshrcのようなシェルの設定ファイルを覗くと、どこかに

export RAILS_MASTER_KEY=blahblahblah...

といった設定が書き込まれているかもしれません。
こうなるとマシン全体で共通のマスターキーを設定したことになるので、複数のプロジェクトを並行して開発するのが難しくなります。
ローカルで開発する場合は環境変数よりも各プロジェクトにconfig/master.keyを用意する方が何かと扱いやすいと思います。

P.S.
sudoの件は僕にもちょっとよくわからないので、回答できないです。
すいません。

投稿2022/02/05 00:34

jnchito

総合スコア357

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

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

divclass123

2022/02/05 09:46

ご回答いただきありがとうございました。 全部伊藤さんの予想通りでした。 Railsが、環境変数を参照してしまったのですね。 以前のQiitaの記事も書き換えさせていただきます。 >ただ、Qiitaは「便利なメモ置き場」ではありません。 こういった用途ではQiitaではなくGistを使いましょう。 Qiitaの記事は削除して、Gistのリンクに本文を付け替えてください。 承知いたしました。入れ替えました。 貴重なお時間を使っていただき誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問