LoginSignup
0
1

More than 5 years have passed since last update.

Rails 5.2 + Webpacker を OpsWorks Chef 11 でデプロイする

Last updated at Posted at 2018-08-04

1. 概要

古き良きアセットパイプラインを使用するRailsアプリケーションから脱却し、
なんとかかんとか、Rails5.2 + Webpackerでアプリをつくりましたが、
今まで当たり前のようにOpsWorksでデプロイしてきたので、デプロイでかなりつまりました。。。

CapistranoとかItamaeを使うことも考えたり、
OpsWorks Chef 12を使いカスタムクックブックを作成する道を模索したり、
はたまた、Elastic Beanstalkでデプロイする道を模索したりしました。

が、弊社はちょっとしたフロントエンドの更新など、
ノンプログラマがデプロイを行うこともあるので、
なんとかOpsWorksそれもかわらぬChef 11でできぬかと模索しました結果...

凄くシンプルな方法で行けることがわかりました。
この問題に囚われっぱなしだった1週間ぐらいを返してほしい・・・

この投稿が少しでも、同じ状況の方のお役に立てれば幸いです。

2. 対象者

この記事は以下の条件を全て満たす方が対象です。
1. Rails5.2 + Webpackerで可動するアプリが既に完成している
2. OpsWorks(Chef 11)でのデプロイは行える。

3. 手順解説

### 3-1. インスタンス立ち上げ直後の初回のみ必要な操作
この手順は不要になりました。
以下のdeploy hookの設定ファイルを作成するだけで、
インスタンス追加時も問題なくデプロイできました。

3-1. Chefのdeploy hookの設定ファイルを作成

該当のRailsアプリのルートディレクトリにdeployディレクトリを作成し、
その中にbefore_migrate.rbというファイルを作成する。

その中身は以下のように記載してデプロイするだけでOK。
ご自身のアプリ名のところは、ご自身のRailsアプリ名をシンボルで入力してください。

たとえば、デプロイするアプリ名がrails_blogであれば、:rails_blogと入力します。
ハイフンを含むアプリ名はハイフンが自動的に_アンダースコアになるそうですので、
確認しておりませんが、該当する場合は注意が必要です。

Chef::Log.info("Running deploy/before_migrate.rb")
env = node[:deploy][ご自身のアプリ名][:rails_env]
current_release = release_path

execute "config_nodejs" do
  user 'root'
  cwd current_release
  command "curl --silent --location https://rpm.nodesource.com/setup_8.x | bash - "
end

execute "install_nodejs" do
  user 'root'
  cwd current_release
  command "yum -y install nodejs"
end

execute "config_yarn" do
  user 'root'
  cwd current_release
  command "curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo"
end

execute "install_yarn" do
  user 'root'
  cwd current_release
  command "yum -y install yarn"
end

execute "yarn install" do
  cwd current_release
  command "yarn install"
  environment "RAILS_ENV" => env
end

execute "webpack" do
  cwd current_release
  command "./bin/webpack"
  environment({"RAILS_ENV" => env, "NODE_ENV" =>env})
end

3-2. assets:precompileじゃだめなのか?

Webpackerbundle exec rails assets:precompileにフックして、
yarn:installwebpack:compileを実行してくれるとWebpackerの公式ドキュメントに有ります。

それに基づいてはじめは、deploy/before_migration.rb内では、
bundle exec rails assets:precompileを実行するようにしていました。

しかし、それでは何故かうまくいきませんでした。。。
bundle exec rails webpack:compileや、
bundle exec rake assets:precompile
bundle exec rake webpack:compileも試しましたが、
エラーでうまくデプロイできなかったり、デプロイで来てもRailsアプリが正常に動作しなかったりでした。

4. まとめ

本当に今回は手こずりました。
終わってみればシンプルなことなのですが、
そこにストレートに導いてくれる解説や情報がなく時間がかかりました。

この方法を見つける直前は、一回でプロイしてからSSh接続して、
yarn installNODE_ENV=production ./bin/webpack実行して、
またOpsWorksからWeb Sever Restartするというめちゃめんどくさい方法でやっていました。

この方法が見つかってよかったです。

ご意見・ご質問遠慮なくコメントください。
またもっといい方法であったらぜひご教授お願いします。
特にインスタンスい追加時の初回の作業もChefで自動化したいです。

参考記事

OpsWorksでNodejsアプリを動かすときにNODE_ENVが指定できないのを何とかする件

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1