LoginSignup
2
2

More than 5 years have passed since last update.

Windowsで認証付きProxy環境下でElixir+Phoenix Frameworkをインストールする際にハマった事。

Posted at

タイトル通りで、えらくハマって諦めかけてたんですが、たまたま抜け方がわかったので記事にしておきます。

実施環境

Elixir 1.6.4 (compiled with OTP 19)

手順

  1. Phoenix Frameworkに使うアプリのインストール
    1. nodejsのインストール
    2. PostgreSQLのインストール
  2. Elixirのインストール
    1. Elixirのインストーラーをダウンロード&実行(この時にErlangもインストールされる)
  3. Phoenix Frameworkのインストール
    1. mix local.hexを実行
    2. mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ezを実行
  4. テスト
    1. プロジェクトのフォルダを作りたいところで、mix phx.new <project>を実行
    2. プロジェクトのフォルダの中に入り(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

免責事項

障害箇所の特定はやってません。その為、もっといい方法があるかも知れません。
特定のプラットフォームやバージョン依存の可能性があります。今後修正されるかも知れません。
(修正されるなら、%エンコーディングを許容してほしいですが・・・・・・)

2
2
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
2
2