LoginSignup
1
0

More than 3 years have passed since last update.

Elastic BeanstalkでPHP/Ruby混在プロジェクトをデプロイ

Posted at

Elastic Beanstalk=EB

前提

ベースはCakePHP2プロジェクト。
CakePHP2には標準ではマイグレーション機能がない。
最初はCake用のマイグレーションプラグイン使ってたけど途中でRuby用のマイグレーションツールを使うように変更したらしい。
https://github.com/winebarrel/ridgepole
マイグレーションだけなのでRuby用でも使える。
デプロイ時にPHPとRuby両方必要になっている。

EBのプラットフォームは64bit Amazon Linux 2018.03 v2.8.12 running PHP 5.6
PHP7で動かないので仕方なくまだ5.6。
関係ないけど今回の目的は東京リージョンへの変更なので他は後から。

困ること

手動で作業するなら何も問題ない。
PHPとRuby同時にインストールできないなんてことはない。
bundle installしてマイグレーション実行すればいい。

問題はこれをEBの設定ファイル内でやろうとするとエラー。
元からRuby2.0がインストールされてるけどridgepoleは動かないのでアンインストールしてから2.4をインストール。
bundle installするとインストール失敗。

Installing mysql2 0.5.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

Ruby環境はこれが多い…。native extension gemのせいで厄介なエラーに頻繁に遭遇する。
検索すればruby24-devel mysql-develもインストールすればいいと分かるけどEBではこれだけでは解決しなかった。

ここからは何も情報がない世界。

最終的にはPATH環境変数がないのが原因と分かった。
解決の糸口はenvしてみたらEC2にSSHしてenvとEBのデプロイ中のenvが違ったから。
デプロイ中の環境変数が足りてない。
gemのコンパイル時になにかのコマンドが見つからずにエラー、と。

設定ファイル

container_commands:
  01_install:
    command: |
      yum remove ruby20 ruby20-devel rubygems20 -y
      yum install ruby24 ruby24-devel mysql-devel -y
      gem install bundler --no-ri --no-rdoc
      /usr/local/bin/bundle install
    env:
      PATH: /sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/usr/local/bin
    leader_only: true
  02_migrate:
    command: /usr/local/bin/ridgepole ...
    leader_only: true
    env:
      LC_ALL: ja_JP.UTF-8
      LANGUAGE: ja_JP:ja

ridgepole実行時のLC_ALLなんかも普通は気付けない…。

PHPプロジェクトにRuby混ぜると何倍も複雑になる。

1
0
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
1
0