Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir/Phoenix新项目Comeonin.Bcrypt不可用_Elixir_Phoenix Framework_Bcrypt - Fatal编程技术网

Elixir/Phoenix新项目Comeonin.Bcrypt不可用

Elixir/Phoenix新项目Comeonin.Bcrypt不可用,elixir,phoenix-framework,bcrypt,Elixir,Phoenix Framework,Bcrypt,首先,我在Windows10中开发。每次编译之前,我都会运行vcvvarsall.bat amd64。我正在使用: 长生不老药1.4.2 凤凰城1.2.1版 我开始了一个全新的项目,制作了一个用户表,一切都很好。我添加了comeonin来散列pw,我不能再创建用户了。我收到一个错误页面,上面写着: 函数Comeonin.Bcrypt.hashpwsalt/1未定义(模块Comeonin.Bcrypt不可用) 以下是相关文件中的代码: Mix.exs User.ex 当我试图保存一个调用gen

首先,我在Windows10中开发。每次编译之前,我都会运行
vcvvarsall.bat amd64
。我正在使用:

  • 长生不老药1.4.2

  • 凤凰城1.2.1版

我开始了一个全新的项目,制作了一个用户表,一切都很好。我添加了comeonin来散列pw,我不能再创建用户了。我收到一个错误页面,上面写着:
函数Comeonin.Bcrypt.hashpwsalt/1未定义(模块Comeonin.Bcrypt不可用)

以下是相关文件中的代码:

Mix.exs

User.ex

当我试图保存一个调用generate_password_hash的用户时,会出现以下错误:

控制台

[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  
[warn]模块Elixir.Comeonin.Bcrypt的on_load函数返回{:错误,
{:加载_失败,
'未能加载NIF库c:/code/phoenix/pollar\u app\u v2/\u build/dev/lib/comeonin/priv/bcrypt\u NIF:\'未指定错误\'}
[信息]在16毫秒内发送500
[错误]#运行PollarAppV2的PID。终结点已终止
服务器:本地主机:4000(http)
请求:帖子/用户
**(退出)引发了一个异常:
**(UndefinedFunctionError)函数Comeonin.Bcrypt.hashpwsalt/1为
未定义(Comeonin.Bcrypt模块不可用)
(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_管道/1
(pollar_app_v2)lib/plug/debugger.ex:123:PollarAppV2.Endpoint.“调用
(可重写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
(牛仔)
c:/code/phoenix/pollar_app_v2/deps/cowboy/src/cowboy_protocol.erl:442::cowboy_protocol.execute/4

我已经多次运行了
mix deps.clean--all
mix deps.update--all
mix deps.compile
mix compile
,等等。它从不表示nif文件未编译,我可以在文件结构中的正确位置看到这些文件,但我无法在应用程序中访问Bcrypt。关于如何解决这个问题有什么想法吗?

我遇到了同样的问题。从中,据说您需要为choosen算法添加正确的库。就你而言:

{:bcrypt_elixir,“~>1.0”},


它为我解决了这个问题。

我遇到了同样的问题。从中,据说您需要为choosen算法添加正确的库。就你而言:

{:bcrypt_elixir,“~>1.0”},


它为我解决了这个问题。

这是由于Bcrypt的跨平台问题造成的,它必须从C编译。基本上,64位Erlang不能与32位dll一起工作

解决此问题的第一步是安装Visual Studio Community edition 2015或更高版本。然后安装C++的构建工具。 接下来,打开“VS2015的开发者命令提示符”。它将在其当前目录中打开一个提示符(例如
C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\

在它的
VC
子目录中,应该有一个名为
vcvarsall.bat
的文件
cd
进入该目录,并向vcvarsall.bat命令传递一个参数,以将编译目标设置为64位:

cd vc
vcvarsall.bat amd64
接下来,带着你的Phoenix回到你的目录,清理你为comeonin构建的所有内容并重新编译

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

然后,您的平台应该有一个工作的Bcrypt NIF。

这是由于Bcrypt的跨平台问题造成的,必须从C编译。基本上,64位Erlang不能使用32位dll

解决此问题的第一步是安装Visual Studio Community edition 2015或更高版本。然后安装C++的构建工具。 接下来,打开“VS2015的开发者命令提示符”。它将在其当前目录中打开一个提示符(例如
C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\

在它的
VC
子目录中,应该有一个名为
vcvarsall.bat
的文件
cd
进入该目录,并向vcvarsall.bat命令传递一个参数,以将编译目标设置为64位:

cd vc
vcvarsall.bat amd64
接下来,带着你的Phoenix回到你的目录,清理你为comeonin构建的所有内容并重新编译

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

然后,您的平台应该有一个工作的Bcrypt NIF。

您是否也尝试过
混合清理
(或手动删除
\u build
)?是的,我也多次尝试过这两种方法。我只是找不到任何有效的东西。哪个版本的Comeonin?你有没有安装mingw?Comeonin 3.0.2,是的,我有mingw。现在真正困扰我的是,如果我不断地创建新项目,一遍又一遍地执行完全相同的过程,有时有效,有时无效。正如中所述,有些项目根本不起作用,而另一些项目确实起作用。这太令人沮丧了。你是否也尝试过
mix clean
(或手动删除
\u build
)?是的,我也多次尝试过这两种方法。我只是找不到任何有效的东西。哪个版本的Comeonin?你有没有安装mingw?Comeonin 3.0.2,是的,我有mingw。现在真正困扰我的是,如果我继续创造