几种常见的部署方法如下:
使用命令行演示互动部署 - 一般将web服务器作为守护程序运行。常用工具有:
目标机器上不需要安装Go语言环境。Revel命令行工具 提供了package
包命令,用来编译和压缩应用程序, 如下所示:
# 本地测试运行
$ revel run import/path/to/app
.. 测试程序 ..
# 打包程序
$ revel package import/path/to/app
打包的文件准备好了: app.tar.gz
# 复制到目标机器
$ scp app.tar.gz target:/srv/
# 在目标机器上运行
$ ssh target
$ cd /srv/
$ tar xzvf app.tar.gz
$ bash run.sh
如果您的本地机器与目标机器的架构相同,那么不会有什么问题。否则,你需要参考交叉编译来构建指定平台架构的程序。
由于静态链接的二进制程序带有完整的资源文件,可能会变得相当大,所以支持增量部署。
# 构建应用程序到一个临时目录
$ revel build import/path/to/app /tmp/app
# 将临时目录 Rsync 到服务器上的主目录
$ rsync -vaz --rsh="ssh" /tmp/app server
# 连接到服务器,并重新启动应用程序
...
Rsync 支持ssh完整的复制操作。例如, 下面是一个更复杂的操作:
# 一个使用自定义证书、登录名和目标目录的例子
$ rsync -vaz --rsh="ssh -i .ssh/go.pem" /tmp/myapp2 ubuntu@ec2-50-16-80-4.compute-1.amazonaws.com:~/rsync
这种方法依赖你的版本控制系统来分发、更新代码。你需要在服务器上安装Go语言环境。好处是,你避免了潜在的交叉编译。
$ ssh server
... 安装Go语言环境 ...
... 配置存储库 ...
# 进入你的应用程序所在的目录 (GOPATH环境变量), 拉取代码, 并运行。
$ cd gocode/src/import/path/to/app
$ git pull
$ revel run import/path/to/app prod
Revel 维护了一个 Heroku Buildpack, 允许一条命令即可部署代码,请参考 自述文件 使用说明
为了创建一个交叉编译环境,我们需要从源代码构建。参考 从源代码安装Go 获取更多信息。你必须正确设置 $PATH 和 $GOPATH 环境变量, 否则,如果已经有一个二进制的Go语言包存在,你会陷入严重的错误。
当Go编译器安装成功后,通过指定 GOOS 和 GOARCH 目标环境来建立交叉编译环境。参考 可用的环境变量 获取更多信息。
$ cd /path/to/goroot/src
$ GOOS=linux GOARCH=amd64 ./make.bash --no-clean
$ GOOS=windows GOARCH=386 ./make.bash --no-clean
在新的环境中安装Revel,然后设定目标架构,打包应用程序。
$ GOOS=linux GOARCH=amd64 revel package import/path/to/app
然后,将压缩包复制到目标平台。
我们可以对WebServer指定的状态码进行自定义处理,例如针对常见的404/403/500等错误,我们可以展示自定义的错误信息、页...
Tornado使用三个记录器流:tornado.access:Tornado的HTTP服务器(以及可能在future中的其他服务器)的每个请求日志记录...
您可能之前阅读过,您可以设置默认的Response Status Code。但在某些情况下,您需要返回与默认值不同的状态代码。用例例如,假设...
在 Flask 中处理文件上传非常简单。它需要一个 HTML 表单,其 enctype 属性设置为“multipart/form-data”,将文件发布...
基于web的应用程序通常需要具有向用户/客户端发送邮件的功能。Flask-Mail扩展使得与任何电子邮件服务器建立简单的接口变得非常容...
ALLOWED_HOSTS 配置在运行测试时被验证。这允许测试客户端区分内部和外部 URL。支持多租户或根据请求的主机改变业务逻辑的项...
Java Swing教程 -Java Swing JProgressBarJProgressBar用于显示任务的进度。它有一个方向,可以是水平或垂直。JProgressBar有三...
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢!『 与其纠结,不如行动学习。Innovate ,And o...
注意版本要求:3.4.0版本以上MybatisPlusInterceptor该插件是核心插件,目前代理了Executor#query和Executor#update和S...
resultMap元素是MyBatis中最重要最强大的元素。它可以让你从90%的JDBCResultSets数据提取代码中解放出来,并在一些情形下...