Phoenix on Raspberry Pi の導入メモ

プログラミング言語ElixirのWebフレームワークである「Phoenix」をRaspberry Pi 1 に導入してみましたが、いたるところで詰まったのでメモしておきます。

# 目標 Raspberry Pi Model BにPhoenixを導入する。

今時何で初代を使っているのだろう。。

問題1

「Elixir Phoenix」などのワードで検索すると、多くの記事で以下のような導入方法が紹介されています。

qiita.com

この記事におけるPhoenixの導入方法を試みると、まずmix local.hexの実行の時点で失敗しました。エラー文の画像はありませんが、以下のような内容です。
Phoenixの導入のためにはhexは必須ではありませんが、mix archive ~の部分も同様のエラーで失敗します。

stackoverflow.com

エラー文から察するに、SSLが有効になっていないことが原因のようです。 opensslが入っていることを確認したうえでErlang VMの再導入を試みましたが、無駄のようです。

そこで、Erlang VMソースコードからビルドすることを試みます。Erlang VMをビルドしてSSLを有効にする方法は以下の記事を始めとして多くの記事で紹介されているように、kerlというバージョンマネージャを使用すれば容易に行うことができますが、コンパイルオプションが曲者でした。

qiita.com

紆余曲折あり、私の環境ではオプションを以下のようにすることでようやくSSLが有効になりました。

KERL_CONFIGURE_OPTIONS="--enable-dynamic-ssl-lib --with-ssl=/usr/bin/ --disable-hipe --enable-smp-support --enable-threads --enable-kernel-poll --disable-native-libs --without-javac"

このオプションでビルドした場合、初代Raspberry Piのスペックでは数時間から半日ほど時間を要しました。

問題2

Erlang VMソースコードからビルドし、Elixirの環境を導入します。 Elixirの環境は、

$ apt-get install elixir

で問題ありませんでした。
導入後、

$ mix phoenix.new phoenix_sample
$ cd phoenix_sample
$ mix phoenix.server

とすることで導入完了の予定でしたが、ここで別の問題が発生しました。mix phoenix.serverの実行中に行われるnpm installでエラーが発生し、失敗する、というものでした。

ここでnpmのバージョンを調べると、

$ npm --version

v0.14.21という、古すぎるバージョンであることが判明したため、以下の記事に則ってnpm(及びnode)のアップデートを行い、

qiita.com

再び

$ mix phoenix.server

とすることで解決できました。

導入成功

導入後、初回起動時はコンパイルが多く、ある程度時間を要しましたが、実際にブラウザからアクセスでき、同時にログ出力も確認されました。
ログの応答速度から察するに、初代Raspberry Piにとってはある程度の速度が出ている・・・のか?というところです。

f:id:je6bmq:20170131213245p:plain f:id:je6bmq:20170131213322p:plain