この記事
こちらの前編の続きです。
再デプロイエラー
上記の記事で初回デプロイまでは難なくできましたが、再デプロイが全然上手くいきませんでした。
出ていたエラーが下記のようなものです。(文字化けはご容赦ください。)
Webpacker is installed 脂 魂
Using /var/app/ondeck/config/webpacker.yml file for setting up webpack paths
Compiling窶ヲ
Compilation failed:
yarn run v1.2.1
$ /var/app/ondeck/node_modules/.bin/webpack --config /var/app/ondeck/config/webpack/production.js
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
warning From Yarn 1.0 onwards, scripts don’t require “--” for options to be forwarded. In a future version, any explicit “--” will be forwarded as-is to the scripts.
fs.js:1331
writeAll(fd, isUserFd, buffer, 0, buffer.length, position, callback);
^
TypeError: Method get TypedArray.prototype.length called on incompatible receiver [object Object]
at Buffer.get length [as length] (native)
at writeFd (fs.js:1331:45)
at fs.js:1322:7
at FSReqWrap.oncomplete (fs.js:123:15)
error Command failed with exit code 1.
(Executor::NonZeroExitStatus)
状況としては書き込み時にメモリなどの問題で失敗しているようでした。
私の環境ではVue.jsを使ってほぼSPAに近い状態だったので.vueファイルなどをコンパイルしたファイルが数MBとかなり大きくなっていたことが原因のようでした。
暫定策
プレコンパイルをローカルで実施することにしました。
インスタンスサイズにもよるのでしょうが、この方が格段にデプロイが早かったです。
結果的には下記のようなファイルで落ち着きました。
01_yarn.config
commands:
01_node_get:
cwd: /tmp
command: 'sudo curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -'
02_node_install:
cwd: /tmp
command: 'sudo yum -y install nodejs'
03_yarn_get:
cwd: /tmp
# don't run the command if yarn is already installed (file /usr/bin/yarn exists)
test: '[ ! -f /usr/bin/yarn ] && echo "yarn not installed"'
command: 'sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo'
04_yarn_install:
cwd: /tmp
test: '[ ! -f /usr/bin/yarn ] && echo "yarn not installed"'
command: 'sudo yum -y install yarn'
05_mkdir_webapp_dir:
command: mkdir /home/webapp
ignoreErrors: true
06_chown_webapp_dir:
command: chown webapp:webapp /home/webapp
ignoreErrors: true
07_chmod_webapp_dir:
command: chmod 700 /home/webapp
ignoreErrors: true
03_conteiner_comand.config
container_commands:
01-bundle_install:
command: bundle install --path vendor/bundle
02-db_migrate:
command: bundle exec rake db:migrate
03-db_seed:
command: bundle exec rake db:seed
その上で、環境変数は下記のようにしています。(実行時は1行)
()の中は適宜自分の環境に読み変えてください。
eb setenv
RDS_PORT=3306
SECRET_KEY_BASE=<secret_key>
RAILS_SKIP_ASSET_COMPILATION=true
RDS_PASSWORD=<pass>
RDS_DB_NAME=ebdb
RACK_ENV=production
RDS_USERNAME=<user_name>
BUNDLE_WITHOUT=test:development
RAILS_SKIP_MIGRATIONS=true
RDS_HOSTNAME=<hogehoge.rds.amazonaws.com>
-e <environment_name>
デプロイ手順は下記。
bundle exec rake assets:precompile assets:clean RAILS_ENV=production SECRET_KEY_BASE=<secret_key>
git add .
eb deploy <environment_name> --staged
最後に
AWS Elastic BeanstalkでRailsアプリをデプロイする際の参考になれば幸いです。
Railsはまだ初心者のため、色々ご指摘ありましたら優しく教えてください。