2017-05-21 10 views
1

まず、私はWindows 10で開発しています。それぞれのコンパイルの前にvcvarsall.bat amd64を実行します。私が使用しています:エリクサー/フェニックス新しいプロジェクトComeonin.Bcryptは利用できません

  • エリクサー1.4.2

  • フェニックスV1.2.1

私は、ブランドの新しいプロジェクトを開始したユーザーテーブルを作って、すべてが正常に働いていました。私はpwをハッシュするためにcomeoninを追加し、私はもはやユーザーを作成することができません。

Mix.exs

# mix.exs 

... 

    def application do 
    [mod: {PollarAppV2, []}, 
    applications: [:phoenix, :phoenix_pubsub, :phoenix_html, :cowboy, :logger, :gettext, 
    :phoenix_ecto, :postgrex, :comeonin, :timex]] 
    end 

... 

    defp deps do 
    [{:phoenix, "~> 1.2.1"}, 
    {:phoenix_pubsub, "~> 1.0"}, 
    {:phoenix_ecto, "~> 3.0"}, 
    {:postgrex, ">= 0.0.0"}, 
    {:phoenix_html, "~> 2.6"}, 
    {:phoenix_live_reload, "~> 1.0", only: :dev}, 
    {:gettext, "~> 0.11"}, 
    {:cowboy, "~> 1.0"}, 
    {:comeonin, "~> 3.0"}, 
    {:timex, "~> 3.0"}] 
    end 

... 

User.ex


function Comeonin.Bcrypt.hashpwsalt/1 is undefined (module Comeonin.Bcrypt is not available)

ここでは、関連するファイルからのコードです:私は、エラーページの格言を得ます 私はmix deps.clean --all実行した

[warn] The on_load function for module Elixir.Comeonin.Bcrypt returned { :error, 
{:load_failed, 
    'Failed to load NIF library c:/code/phoenix/pollar_app_v2/_build/dev/lib/comeonin/priv/bcrypt_nif: \'Unspecified error\''}} 

[info] Sent 500 in 16ms 
[error] #PID<0.430.0> running PollarAppV2.Endpoint terminated 
Server: localhost:4000 (http) 
Request: POST /users 
** (exit) an exception was raised: 
    ** (UndefinedFunctionError) function Comeonin.Bcrypt.hashpwsalt/1 is 
undefined (module Comeonin.Bcrypt is not available) 
     (comeonin) Comeonin.Bcrypt.hashpwsalt("asdfasdf") 
     (pollar_app_v2) web/models/user.ex:40: PollarAppV2.User.generate_password_hash/1 
     (pollar_app_v2) web/controllers/user_controller.ex:17: PollarAppV2.UserController.create/2 
     (pollar_app_v2) web/controllers/user_controller.ex:1: PollarAppV2.UserController.action/2 
     (pollar_app_v2) web/controllers/user_controller.ex:1: PollarAppV2.UserController.phoenix_controller_pipeline/2 
     (pollar_app_v2) lib/pollar_app_v2/endpoint.ex:1: PollarAppV2.Endpoint.instrument/4 
     (pollar_app_v2) lib/phoenix/router.ex:261: PollarAppV2.Router.dispatch/2 
     (pollar_app_v2) web/router.ex:1: PollarAppV2.Router.do_call/2 
     (pollar_app_v2) lib/pollar_app_v2/endpoint.ex:1: PollarAppV2.Endpoint.phoenix_pipeline/1 
     (pollar_app_v2) lib/plug/debugger.ex:123: PollarAppV2.Endpoint."call 
(overridable 3)"/2 
     (pollar_app_v2) lib/pollar_app_v2/endpoint.ex:1: PollarAppV2.Endpoint.call/2 
     (plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4 
     (cowboy) 
     c:/code/phoenix/pollar_app_v2/deps/cowboy/src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4 

コンソール、mix deps.update --allmix deps.compilemix compile、など:私はgenerate_password_hash起動するユーザーを、保存しようとすると

は、私はこのエラーを取得しますすべて複数回。これは、nifファイルがコンパイルされていないことを示すものではなく、ファイル構造内の正しい場所にファイルを表示できますが、アプリケーション内でBcryptにアクセスすることはできません。どのようにこれを修正するための任意のアイデア?

+0

「ミックスクリーン」(または「_ビルド」を手動で削除)してみましたか? – Dogbert

+0

はい、私はこれらの両方を何度もやっています。私はちょうど動作するものを見つけることができないようです。 – smkarber

+0

Comeoninのどのバージョン? –

答えて

4

私は同じ問題を抱えています。 the repo's readmeから、選択したアルゴリズムに正しいライブラリを追加する必要があると言われています。あなたのケースでは:

{:bcrypt_elixir, "~> 1.0"},

それは私のために問題を解決しました。

0

これは、Cからコンパイルする必要があるBcryptのクロスプラットフォームの問題によるものです。基本的に、64ビットのErlangは32ビットのdllで動作していません。

解決するための最初の手順は、Visual Studio Community Edition 2015以降をインストールすることです。次に、C++ビルドツールをインストールします。

次に、「VS2015の開発者コマンドプロンプト」を開きます。現在のディレクトリにプロンプ​​トが開きます(例:C:\Program Files (x86)\Microsoft Visual Studio 14.0\)。

VCサブディレクトリには、vcvarsall.batというファイルが存在する必要があります。そのディレクトリにcdを置き、vcvarsallを渡します。バットは、64ビットにあなたのコンパイルのターゲットを設定するには、引数をコマンド:

cd vc 
vcvarsall.bat amd64 

次に、あなたのフェニックスに戻って自分のディレクトリに移動して、あなたがcomeoninのために構築され、再コンパイルしてきたものは何でも一掃します。

cd c:\path to\my phoenix project 
mix deps.clean comeonin 
mix deps.update comeonin 
mix deps.compile comeonin 

そして、あなたはお使いのプラットフォームのために働いてbcryptのNIFを持っている必要があります。

関連する問題