Haskell 在ghci中以sudo的身份运行main

Haskell 在ghci中以sudo的身份运行main,haskell,ghci,Haskell,Ghci,我有一个快照应用程序 我想在ghci内的端口80上运行它,以便进行本地调试。 通常我会在编译的二进制文件上运行sudo./main-p80,以实现这一点,但在ghci中,我得到的权限被拒绝 *Main> :main -p 80 Initializing app @ / Initializing heist @ /heist ...loaded 35 templates from /Users/dmj/blah/templates Initializing CookieSession @ /

我有一个快照应用程序

我想在ghci内的端口80上运行它,以便进行本地调试。 通常我会在编译的二进制文件上运行
sudo./main-p80
,以实现这一点,但在ghci中,我得到的权限被拒绝

*Main> :main -p 80
Initializing app @ /
Initializing heist @ /heist
...loaded 35 templates from /Users/dmj/blah/templates
Initializing CookieSession @ /sess

Listening on http://0.0.0.0:80/
Error on startup:
bind: permission denied (Permission denied)

Shutting down...
它在非特权端口上工作

*Main> :main -p 8000
Initializing app @ /
Initializing heist @ /heist
...loaded 35 templates from /Users/dmj/blah
Initializing CookieSession @ /sess
Initializing db @ /auth
Initializing acid-state @ /acid

Listening on http://0.0.0.0:8000/

另一方面,请参见本帖:

只需将“/usr/bin/ncat”替换为ghci的完整路径,就可以了


(我相信你已经被唠叨过很多次了,说作为root用户做任何长时间的工作是多么糟糕……而且,这是一个Linux特定的解决方案,所以如果你在Mac或其他*nix上工作,这对你来说都不管用)。

如果你打算调试它,为什么要在端口80上运行它?@Cubic,我正在欺骗我的本地主机,使其相信它实际上是我购买的一个域(
/etc/hosts
trick)。我将所有http流量强制转换为https,并处理向s3上传的文件,这些文件只能在请求中使用正确的域名来源。使用80很难测试所有的w/o。你真的运行了
sudoghci
?从您的描述中不清楚。@托梅利斯,这是一个解决方案,但我在haskell模式的emacs中,调用ghci是在一个非特权端口上完成的。我可能会编辑elisp来添加sudo,或者将8000端口转发到80。没有办法将您的有效userid更改为root。您需要使用sudo启动ghci(或emacs)。OSX没有设置上限:/
sudo setcap 'cap_net_bind_service=+ep' /usr/bin/ncat