The Nameless City

何故か製薬やSAS関連のブログ、の予定。

縛りプレイでの、Phoenix Framework環境構築。

環境の縛り

  • 認証つきProxyで外部環境に繋がる。
    • ユーザIDには「@」を含む。
  • Windows上。

Phoenix Frameworkのインストールガイド

www.phoenixframework.org

必要なアプリ・モジュール

Elixir

そりゃElixirで動くFrameworkだからなあ。

Hex

Erlangのライブラリ管理ツール。

Phoenix

Phoenix Framework本体。Installの所と違ってここに位置付けたのは、単にツリー構造上の話です。Elixirのパッケージだから。
ただ、このインストールの方法では特にHexを使ってインストールしている訳ではない。

Erlang

そりゃElixirはErlangVMで動くからなあ。

Plug, Cowboy, and Ecto

Phoenix Frameworkが必要とするElixirやErlangのパッケージ。中身は今の段階では分からず。
同じVMだからもあるけど、ElixirからErlangのパッケージなんかは利用しやすいようで。
Phoenix入れたら勝手に入るらしい。

node.js (>= 5.0.0)

Phoenix Frameworkではデフォルトではbrunch.ioとかで画面の静的アセット作るらしい。画面はよう分からんが、他に切り替えるほどのノウハウ持っている訳もないので入れておく。

PostgreSQL

裏にDBもつものらしい。うーん、Webアプリから利用するデータおく為のもの?な位置付けでいいのか?
よく知らん。

インストー

Elixirインストー

公式インストーラーで問題なし。
・・・・・・と言いたいがそのままではmixが上手く動かない。後述。

Erlangインストー

問題なし(Elixirと共に入る)。

node.jsインストー

インストール自体は問題ないが、やっぱLinuxベースアプリという事で、Proxyが上手く通らない。
Proxyの設定が必要。

npm -g config set proxy "http://<proxy username>:<proxy password>@<server>:<port>/"
npm -g config set https-proxy "http://<proxy username>:<proxy password>@<server>:<port>/"
npm -g config set registry "http://registry.npmjs.org/"
npm -g config set strict-ssl=false

ユーザ名やパスワードにURIエンコーディングが必要。
試しにbrunch.ioをインストールして通る事は確かめた。
・・・・・・重い。

PostgreSQLインストー

本体は問題なし。psqlodbc入れるStackBuilderが動作しない。Proxy設定を上のように入れてみても上手くいかないので諦め。
psqlodbcを手動で導入した。
postgresユーザのパスワードが、Phoenix Frameworkではpostgresなので苦労しないように一応そうしておく。
・・・・・・良くないです。

Windows版だと、デフォルトでPostgreSQLのそのDB起動周りもサービスとして登録されます。
デフォルトのポート番号は「5432」。

hex導入のmixコマンド

そのままでは動作しない。Proxy設定する所もない。
・・・・・・環境変数http_proxy、https_proxyを設定すればその設定を読んでくれるというのをソースから推測して入れる。
但し、npmの設定と異なり、URIエンコーディングは不要だった。何か他のエスケープ文字あったりする?
他のアプリの設定と一致しないので、ちょっと考えて、mix.batに以下二行を先頭に追加。

@set http_proxy=http://<proxy username>:<proxy password>@<server>:<port>/
@set https_proxy=http://<proxy username>:<proxy password>@<server>:<port>/

これで、「mix local.hex」は成功する。mixコマンド経由ではとりあえずプロキシ通る。

Phoenix導入

「mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez
です。
上が通れば出来るはず。

skeleton試してみる(mix phoenix.new --no-brunch --no-ecto&mix phoenix.server)

プロジェクトの置き場に行って

mix phoenix.new <project name> --no-brunch --no-ecto

する。
すると、のフォルダが出来て、その下にPhoenixのテンプレートがコピーされる。
「Fetch and install dependencies?」と聞かれてYを選択すると、その後に、mix deps.getが実行されて、依存関係のあるモジュールも落ちてくる。

cd <project name>
mix phoenix.server

で、フォルダ配下のElixirのファイルがコンパイルされて、サーバが動く。

普通にプロジェクト作ってみる(mix phoenix.new)

プロジェクトの置き場に行って

mix phoenix.new <project name> --no-brunch --no-ecto

する。
Phoenixのテンプレートがコピーされるまでは一緒(但しモジュールが増えてる)。
ただ、先の質問でYを答えると、mix deps.getの後に、

npm install && node node_modules/brunch/bin/brunch build

が実施されている。これが遅い。

これで、package.jsonの内容をインストールしているらしい。
んだが、クソ重い。なんだこれ。
まあ、他にCPU使ってるのもあるんだけど・・・・・・