タイトル通りで、えらくハマって諦めかけてたんですが、たまたま抜け方がわかったので記事にしておきます。
実施環境
Elixir 1.6.4 (compiled with OTP 19)
手順
- Phoenix Frameworkに使うアプリのインストール
- nodejsのインストール
- PostgreSQLのインストール
- Elixirのインストール
- Elixirのインストーラーをダウンロード&実行(この時にErlangもインストールされる)
- Phoenix Frameworkのインストール
-
mix local.hex
を実行 -
mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
を実行
-
- テスト
- プロジェクトのフォルダを作りたいところで、
mix phx.new <project>
を実行 - プロジェクトのフォルダの中に入り(
cd <project>
)、mix ecto.create
を実行
- プロジェクトのフォルダを作りたいところで、
以下の公式のドキュメントを元に、若干手順前後させてます
Installation – Phoenix v1.3.2
Up and Running – Phoenix v1.3.2
nodeとかpostgresのインストールは省略します。
手順1、2のやり方は省略。認証付きプロキシの設定は似たような話がありますが、nodejsの場合にはnpm config set
でやるのがよいと思います。
あと、プロキシの情報は会社の場合PACファイルでやってる事が多いと思いますが、このPACファイルをそのまま使う方法までは思いついてないです。
PACファイルの内容からプロキシサーバの情報は抜いてますが、やり方は省略。
ハマった所
上記の手順3、手順4でProxy通す方法が異なる為、えらくハマったので記載しておきます。
mix local.hex
が実行出来ない
何も仕込んでない場合には以下の通り、接続出来ない旨のエラーが出て来ます。
>mix local.hex
** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {'repo.hex.
pm', 443}}, {:inet, [:inet], :nxdomain}]}
Could not install Hex because Mix could not download metadata at https://repo.he
x.pm/installs/hex-1.x.csv.
で、結論だけ言いますと、以下のように環境変数を設定すると、認証付きプロキシでも通ります。
set HTTPS_PROXY=http://<proxy_userid>:<proxy_password>@<proxy_server>:<proxy_port>
ここで、注意点です。
自分が試した環境であると、<proxy_userid>に@
が入っています。その場合、どうもその@
のまま設定しないと上手く認証が通りません。パーセントエンコーディングしてしまうとダメです。
また、二重引用符で囲んで環境変数を設定した場合も、認証が通りません。
上記状態で、mix ecto.create
が通らない。
mix archive.install ...
も、上記プロキシ設定で通ります。mix phx.new <project>
も通ります。
しかし、cd <project>
の後のmix ecto.create
でエラーになります。
>mix ecto.create
escript: exception error: no match of right hand side value undefined
in function rebar_log:log/3 (/home/tristan/Devel/rebar3/_build/default/lib/re
bar/src/rebar_log.erl, line 94)
in call from rebar3:handle_error/1 (/home/tristan/Devel/rebar3/_build/default/
lib/rebar/src/rebar3.erl, line 325)
in call from escript:run/2 (escript.erl, line 759)
in call from escript:start/1 (escript.erl, line 277)
in call from init:start_em/1 (init.erl, line 1085)
in call from init:do_boot/3 (init.erl, line 793)
** (Mix) Could not compile dependency :ranch, "escript.exe "c:/Users/thyodo/.mix
/rebar3" bare compile --paths "c:/project/pleiades/elix/pilot/_build/dev/lib/*/e
bin"" command failed. You can recompile this dependency with "mix deps.compile r
anch", update it with "mix deps.update ranch" or clean it with "mix deps.clean r
anch"
結論から言うと、さっき変更した環境変数HTTPS_PROXY
の中身のうち、@
を%40に変更して再度設定した後、mix ecto.create
を実行すると通ります。
>mix ecto.create
Compiling 13 files (.ex)
Generated pilot app
The database for Pilot.Repo has been created
免責事項
障害箇所の特定はやってません。その為、もっといい方法があるかも知れません。
特定のプラットフォームやバージョン依存の可能性があります。今後修正されるかも知れません。
(修正されるなら、%エンコーディングを許容してほしいですが・・・・・・)