首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inets httpd:服务器配置文件语法(proplist_file)

inets httpd:服务器配置文件语法(proplist_file)
EN

Stack Overflow用户
提问于 2018-02-26 14:58:16
回答 1查看 155关注 0票数 0

启动httpd服务器时,配置文件的语法如下:

代码语言:javascript
复制
inets:start(httpd, 
    [{proplist_file, "./server_config.txt"}]
).

httpd文档说:

{proplist_file路径()} 如果定义了该属性,则Inet希望找到该文件中定义的所有其他属性。

和:

这些属性将从一个配置文件中获取,该配置文件可以由一个普通的Erlang属性列表组成。

但是有了这个文件:

server_config.txt:

代码语言:javascript
复制
[
  {port, 0},
  {server_name, "httpd_test"},
  {server_root, "/Users/7stud/erlang_programs/inets_proj"},
  {document_root, "/Users/7stud/erlang_programs/inets_proj/htdocs"},
  {ipfamily, inet6},
  { bind_address, {0,0,0,0,0,0,0,1} }
]

我知道错误:

代码语言:javascript
复制
$ erl
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.2  (abort with ^G)

1> inets:start().
ok

2> inets:start(httpd, [{proplist_file, "/Users/7stud/erlang_programs/inets_proj/server_config.txt"}]).
** exception error: no try clause matching {error,{8,erl_parse,["syntax error before: ",[]]}}
     in function  httpd_sup:httpd_config/1 (httpd_sup.erl, line 144)
     in call from httpd_sup:start_child/1 (httpd_sup.erl, line 52)
     in call from inets:call_service/3 (inets.erl, line 461)

接下来,我尝试了Apache语法,但这也不起作用:

server_config.txt:

代码语言:javascript
复制
Port 0
ServerName "httpd_test"
ServerRoot "/Users/7stud/erlang_programs/inets_proj"
DocumentRoot "./htdocs"
Ipfamily inet6
BindAddress {0,0,0,0,0,0,0,1}
代码语言:javascript
复制
3> inets:start(httpd, [{file, "./server_config.txt"}]).         
{error,"httpd_conf: \"/Users/7stud/erlang_programs/inets_proj\" is an invalid ServerRoot"}

4>

好吧,通过去掉引号,我在Apache样式语法方面取得了一些进展:

代码语言:javascript
复制
Port 0
ServerName httpd_test
ServerRoot /Users/7stud/erlang_programs/inets_proj
DocumentRoot ./htdocs
Ipfamily inet6
BindAddress 0:0:0:0:0:0:0:1

现在,我得到了错误:

代码语言:javascript
复制
8> inets:start(httpd, [{file, "./server_config.txt"}]).
{error,"httpd_conf: 0:0:0:0:0:0:0:1 is an invalid address"}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-26 22:40:15

我算出了proplist syntax。当我开始使用proplist语法时,我缩短了路径:

server_config.txt:

代码语言:javascript
复制
[
  {port, 0},
  {server_name, "httpd_test"},
  {server_root, "."},
  {document_root, "./htdocs"},
  {ipfamily, inet6},
  { bind_address, {0,0,0,0,0,0,0,1} }
].

注意结尾处的.!语法是如此明显,难怪文档没有给出一个例子。:(

代码语言:javascript
复制
$ erl
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.2  (abort with ^G)

1> inets:start().
ok

2> {ok, Server} =  inets:start(httpd, [{proplist_file, "./server_config.txt"}]).
{ok,<0.73.0>}

3> httpd:info(Server).
[{mime_types,[{"htm","text/html"},{"html","text/html"}]},
 {ipfamily,inet6},
 {server_name,"httpd_test"},
 {bind_address,{0,0,0,0,0,0,0,1}},
 {server_root,"."},
 {port,49400},
 {document_root,"./htdocs"}]

我仍然想知道如何用ipv6指定一个Apache syntax绑定地址。也许ipv6是在erlang语法实现之后出现的?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48991314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档