使用supervisord运行Golang程序时无法识别的GOPATH

时间:2015-12-29 07:13:43

标签: go supervisord

我有一个实现Web服务器的Golang程序。预计它将持续运行,并且在任何意外故障或崩溃的情况下重新启动。为此,我尝试使用supervisord将其配置为UNIX进程。但是,我面临的问题是代码中包含的外部go库未被识别为supervisord无法识别GOPATH。这导致了以下错误:

web_server.go:11:2: cannot find package "github.com/gorilla/mux" in any of:
    /usr/lib/go/src/github.com/gorilla/mux (from $GOROOT)
    ($GOPATH not set)

使用supervisord运行Web服务器时。我的Web服务器的supervisord配置是:

[program:web_server]
command=go run web_server.go
directory=/home/ubuntu
autostart=true
autorestart=true
startretries=5
stderr_logfile=/home/ubuntu/err_logs/web_server.err.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10

这是什么解决方法?

1 个答案:

答案 0 :(得分:2)

我所遗漏的supervisord所述的supervisord的一个重要属性是:

  

子进程将继承用于启动的shell的环境   SUPERVISOR_ENABLED计划。将设置几个环境变量   监督自己在孩子的环境中也包括在内   SUPERVISOR_PROCESS_NAME(表示该过程的标志在主管下   control),SUPERVISOR_GROUP_NAME(配置文件指定的进程   这个过程的名称)和environment(   子进程的config-file指定进程组名称。)

     

这些环境变量可能会在[supervisord]中被覆盖   section config选项名为[program:x](适用于所有子进程)   或者在per [program:x]部分环境配置选项中   (仅适用于GOPATH中指定的子流程   部分)。

因此,在environment变量中添加[program:web_server] command=go run web_server.go directory=/home/ubuntu autostart=true autorestart=true startretries=5 stderr_logfile=/home/ubuntu/err_logs/web_server.err.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 environment=GOPATH="/home/ubuntu" 解决了这个问题。

let _url = NSURL(string: url)
let URLRequest = NSURLRequest(URL: _url!)
imageDownloader.imageCache?.removeImageForRequest(URLRequest, withAdditionalIdentifier: nil)
imageDownloader.sessionManager.session.configuration.URLCache?.removeCachedResponseForRequest(URLRequest)