在 erlang 脚本中使用加密
Use crypto in erlang escript
我有一个 erlang 项目,我要为它生成一个独立的 erlang escript,为此我使用了 rebar escriptize,将所有依赖项添加到我的 rebar.conf 和其他一些选项,如您所见
{erl_opts, [{parse_transform, lager_transform}]}.
{lib_dirs,["deps"]}.
{deps, [
{'lager', ".*", {
git, "git://github.com/basho/lager.git", {tag, "2.0.0"}}
},
{'cowboy', ".*", {
git, "git://github.com/ninenines/cowboy.git", {tag, "2.0.0-pre.1"}}
},
{'jsx', ".*", {
git, "git://github.com/talentdeficit/jsx.git", {tag, "v2.0.4"}}
}
]}.
{escript_emu_args, "%%! -smp auto\n"}.
{escript_emu_args, "%%! -pz ../dir-of-some-beams\n"}.
{escript_name, "multiscreen_ws_app"}.
{escript_incl_apps, [sasl,stdlib,kernel,ranch,crypto,cowlib,cowboy,asn1,public_key,ssl,jsx,compiler ,syntax_tools,lager,goldrush]}.
当然,我已经在我的主模块中创建了一个 main 方法来启动脚本。当我 运行 使用 escript multiscreen_ws_app 命令生成的脚本时,我看到我的程序输出很好,但是当我收到我的第一个 websocket pagckage 并尝试解密时它 BAM,它只是不起作用,我收到消息:
17:03:30.222 [error] Unable to load crypto library. Failed with error:
"load_failed, Failed to load NIF library c:/Users/alessandro.herculano/Music/mul
tiscreen_ws_app/crypto/priv/lib/crypto: 'Couldn't load the specified method
ecificado.'"
OpenSSL might not be installed on this system.
奇怪的是它试图在我的脚本文件中搜索,就像它是一个文件夹一样! c:/Users/alessandro.herculano/Music/multiscreen_ws_app/crypto/priv/lib/crypto 但 multiscreen_ws_app 是我的脚本文件!我该怎么做才能让我的脚本在另一个预定义的位置搜索它?
--------可能重要的几点----
- 我运行在 windows 8 x64 机器上
- 当我 运行 不使用脚本时,我的应用程序 运行 很好
- 我已经尝试使用我的 代码:add_pathz
main 指示加密文件夹,但它也不起作用。
刚刚找到解决方案,我的错,只需从 escript_incl_apps 列表中删除 "crypto" 即可解决问题。
我有一个 erlang 项目,我要为它生成一个独立的 erlang escript,为此我使用了 rebar escriptize,将所有依赖项添加到我的 rebar.conf 和其他一些选项,如您所见
{erl_opts, [{parse_transform, lager_transform}]}.
{lib_dirs,["deps"]}.
{deps, [
{'lager', ".*", {
git, "git://github.com/basho/lager.git", {tag, "2.0.0"}}
},
{'cowboy', ".*", {
git, "git://github.com/ninenines/cowboy.git", {tag, "2.0.0-pre.1"}}
},
{'jsx', ".*", {
git, "git://github.com/talentdeficit/jsx.git", {tag, "v2.0.4"}}
}
]}.
{escript_emu_args, "%%! -smp auto\n"}.
{escript_emu_args, "%%! -pz ../dir-of-some-beams\n"}.
{escript_name, "multiscreen_ws_app"}.
{escript_incl_apps, [sasl,stdlib,kernel,ranch,crypto,cowlib,cowboy,asn1,public_key,ssl,jsx,compiler ,syntax_tools,lager,goldrush]}.
当然,我已经在我的主模块中创建了一个 main 方法来启动脚本。当我 运行 使用 escript multiscreen_ws_app 命令生成的脚本时,我看到我的程序输出很好,但是当我收到我的第一个 websocket pagckage 并尝试解密时它 BAM,它只是不起作用,我收到消息:
17:03:30.222 [error] Unable to load crypto library. Failed with error:
"load_failed, Failed to load NIF library c:/Users/alessandro.herculano/Music/mul
tiscreen_ws_app/crypto/priv/lib/crypto: 'Couldn't load the specified method
ecificado.'"
OpenSSL might not be installed on this system.
奇怪的是它试图在我的脚本文件中搜索,就像它是一个文件夹一样! c:/Users/alessandro.herculano/Music/multiscreen_ws_app/crypto/priv/lib/crypto 但 multiscreen_ws_app 是我的脚本文件!我该怎么做才能让我的脚本在另一个预定义的位置搜索它?
--------可能重要的几点----
- 我运行在 windows 8 x64 机器上
- 当我 运行 不使用脚本时,我的应用程序 运行 很好
- 我已经尝试使用我的 代码:add_pathz main 指示加密文件夹,但它也不起作用。
刚刚找到解决方案,我的错,只需从 escript_incl_apps 列表中删除 "crypto" 即可解决问题。