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

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

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

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

AWS(Amazon Web Services)

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

受付中

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

nakayamaryotaao
nakayamaryotaao

総合スコア0

Ruby on Rails

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

AWS(Amazon Web Services)

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

0回答

0評価

1クリップ

383閲覧

投稿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

version: 0.2 phases: install: runtime-versions: nodejs: 10 pre_build: commands: - rbenv install 2.5.9 - gem install bundler -v 1.17.3 - bundle install --path vendor/bundle artifacts: files: - './**/*'

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

#####appspec.yml

yml

version: 0.0 os: linux files: - source: / destination: /var/www/<アプリ名> permissins: - object: /var/www/ pattern: '**' mode: 775 owner: ec2-user group: ec2-user hooks: ApplicationStop: - location: scripts/stop_server.sh timeout: 300 runas: ec2-user BeforeInstall: - location: scripts/clean.sh timeout: 300 runas: ec2-user AfterInstall: - location: scripts/after_install.sh timeout: 300 runas: ec2-user ApplicationStart: - location: scripts/start_server.sh timeout: 300 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というエラーが出たのも疑問に感じています。

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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 で作成したもの>

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails

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

AWS(Amazon Web Services)

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