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

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

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

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

AWS(Amazon Web Services)

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

Q&A

0回答

1692閲覧

railsアプリケーションをCodePipeline,CodeBuild,CodeCommit,CodeDeploy を用いてデプロイしたい。

nakayamaryotaao

総合スコア0

Ruby on Rails

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

AWS(Amazon Web Services)

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

0グッド

1クリップ

投稿2021/09/15 04:02

前提・実現したいこと

railsアプリケーションをCodePipeline,CodeBuild,CodeCommit,CodeDeploy を用いてデプロイしたい。

###解決したいこと
現在、Code4兄弟の使い方を習得するためにrailsアプリをデプロイしようとしています。

Codebuildでのbuildspec.ymlは成功するのですが、CodeDeployでのappspec.ymlを成功させることができません。

appspec.yml のAfterInstall フック の RAILS_ENV=production bundle exec rake db:migrateでエラーが発生します。

下記に、 【該当すると考えられるエラー文】  , 【buildspec.yml】 , 【appspec.ymlとシェルスクリプト】 を載せます。

###該当すると考えられるエラー文

エラーログを見るためにcat /opt/codedeploy-agent/deployment-root/<deployment-group-ID>/<deployment-ID>/logs/scripts.logを実行

2021-09-15 03:04:17 [stderr]ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `rails credentials:edit`

###buildspec.yml

yml

1version: 0.2 2 3phases: 4 5 install: 6 runtime-versions: 7 nodejs: 10 8 pre_build: 9 commands: 10 - rbenv install 2.5.9 11 - gem install bundler -v 1.17.3 12 - bundle install --path vendor/bundle 13artifacts: 14 files: 15 - './**/*' 16

###appspec.ymlとそれぞれのhookのシェルスクリプト

#####appspec.yml

yml

1version: 0.0 2os: linux 3files: 4 - source: / 5 destination: /var/www/<アプリ名> 6permissins: 7 - object: /var/www/ 8 pattern: '**' 9 mode: 775 10 owner: ec2-user 11 group: ec2-user 12hooks: 13 ApplicationStop: 14 - location: scripts/stop_server.sh 15 timeout: 300 16 runas: ec2-user 17 BeforeInstall: 18 - location: scripts/clean.sh 19 timeout: 300 20 runas: ec2-user 21 AfterInstall: 22 - location: scripts/after_install.sh 23 timeout: 300 24 runas: ec2-user 25 ApplicationStart: 26 - location: scripts/start_server.sh 27 timeout: 300 28 runas: ec2-user

#####stop_server.sh

#!/bin/bash kill -KILL -s QUIT `cat /var/www/<アプリ名>/tmp/pids/unicorn.pid`

#####clean.sh

#!/bin/bash sudo rm -rf /var/www/<アプリ名>/

#####after_install.sh

#!/bin/bash source ~/.bash_profile cd /var/www/<アプリ名> RAILS_ENV=production bundle exec rake assets:precompile RAILS_ENV=production bundle exec rake db:migrate

#####start_server.sh

source ~/.bash_profile cd /var/www/code4-product-register sudo systemctl reload nginx sudo systemctl start nginx bundle exec unicorn -D -E production -c config/unicorn.rb

###考察

EC2インスタンスの/etc/environmentの中に環境変数としてSECRET_KEY_BASEを設定しています。railsアプリケーションはしっかり動いています。

それなのになぜsecret_key_baseが必要となるのかわかりません。

これを解決するには、Codebuild上でSECRET_KEY_BASE を$ EDITOR="vi" bin/rails credentials:editを行い環境変数を入力するのかと考えましたが、できそうにありません。

appspec.ymlの記述内容は対象のEC2インスタンス上で行うと認識しているのですが違うのでしょうか?

また、それぞれのシェルスクリプトにsource ~/.bash_profileを書かなかった場合、bundle: command not foundというエラーが出たのも疑問に感じています。

もしよろしければご教授のほどお願いします。

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

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

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

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

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

yu_1985

2021/09/15 06:10

config/secrets.yml の中身はどうなっていますか > appspec.ymlの記述内容は対象のEC2インスタンス上で行うと認識しているのですが違うのでしょうか? それは合っています > れぞれのシェルスクリプトにsource ~/.bash_profileを書かなかった場合、bundle: command not foundというエラーが出たのも疑問に感じています .bash_profileの中でパスを通しているせいではないでしょうか? .bash_profileが実行されるのはログイン時なので、ログインをしないでユーザだけ使用する場合はその中で定義されているものは実行されないかと。
nakayamaryotaao

2021/09/15 06:28 編集

yu_1985 様 返信ありがとうございます >config/secrets.yml の中身はどうなっていますか rails 5.2.6 を使っているため、config/secrets.yml は廃止されているみたいです。 疑問に思っていたことを2つご回答していただきありがとうございます。 とても参考になります。
yu_1985

2021/09/15 07:57

ではconfig/credentials.yml.encの中身はどうなっていますかね。 環境変数を設定したとは言っていますが、その環境変数をきちんと使っているのかどうかが気になっています。
nakayamaryotaao

2021/09/15 13:46 編集

EDITOR="vi" bin/rails credentials:edit の結果です # aws: # access_key_id: 123 # secret_access_key: 345 # Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies. secret_key_base: <rake secret で作成したもの>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問