Elixir/Phoenix新项目Comeonin.Bcrypt不可用
首先,我在Windows10中开发。每次编译之前,我都会运行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
vcvvarsall.bat amd64
。我正在使用:
- 长生不老药1.4.2
- 凤凰城1.2.1版
函数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。现在真正困扰我的是,如果我继续创造