Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What is going on with this article?
@_muraham

Elastic Beanstalkでnpm installする(rails + browserify-rails)

More than 3 years have passed since last update.

概要

今携わっている案件では、rails + react-rails + browserify-railsを用いて開発しています。browserify-railsはSporoketsでもCommonJSなモジュールを動かせるようになる便利なgemですが、Elastic Beanstalkのdeployで少しハマったのでやったことを記します。

前提

Sporoketsを使うということは、assets:precompileをする必要がありますが、そのタイミングより前にnpm installをして、node_modules/にモジュール群が入っている必要があります。

対応方法

結論としては、.ebextensionsに下記のようなconfigを追加してdeployして解決しました。

ebextensions/install_node_modules.config
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/07_install_node_modules.sh" :
    mode: "000744"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      set -xe
      EB_APP_STAGING_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_staging_dir)
      cd $EB_APP_STAGING_DIR
      npm install

詳細

ebextensionsのconfig

Elastic Beanstalkではデプロイのためのコマンドは.ebextensions配下か、あるいはデプロイ先の環境にconfigを設置しておくと実行されます。
今回は、.ebextensions配下に設定を記述しており、files:で指定しているファイル名/opt/elasticbeanstalk/hooks/appdeploy/pre/07_install_node_modules.shで実行順序を指定しています。
まず、preと書くとタイミング的にはデプロイの前処理段階になります。pre(前処理) -> enact(バージョン切替時) -> post(後処理)という順序で実行されるようです。(詳細)
また、07_install_node_modules.shの先頭の07で実行順を指定しています。数値が小さいほど実行順序が優先されます。(私の環境ではassetのプリコンパイルより早く実行される07としていますが、順番は環境に合わせてください)

落とし穴

Elastic Beanstalkデプロイ先は/var/app/currentですが、デプロイ中のワーキングディレクトリは別なようです。ワーキングディレクトリ自体は記述にあるように、EB_APP_STAGING_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_staging_dir)という風にやれば取得できます。最初はこれに気づかず、npm installしようとしてもpackage.jsonがない、というエラーが発生してデプロイに失敗していました。

エラーが出た時は

eb logs <環境名>でログを参照できます。

参照

AWS Elastic Beanstalk 環境設定

12
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
_muraham

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
12
Help us understand the problem. What is going on with this article?