Help us understand the problem. What is going on with this article?

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

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混ぜると何倍も複雑になる。

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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