我完全不知所措了(看起来很棒)。
所以我想在revel框架中构建一个“web-”应用程序。问题是我在我的mac上编码(os:darwin,arch:amd64),我想在我的服务器上部署应用程序(os:ubuntu 12.04,arch:amd64)。
我在本地“狂热”(所以bin/revel
它是一个:Mach-O 64位可执行文件)在我的服务器上是不可执行的。
现在,当我推送(使用git)时,我有一个后接收脚本来构建应用程序(revel build myapp /path/to/deploy
)。在我试图“开始”狂欢我的服务器之前,它也失败了。
它不起作用,我能理解为什么,但我不知道如何获得可行的工作流程:
PS:我读过http://blog.gopheracademy.com/auto-deploy-revel-site,http://revel.github.io/manual/deployment.html以及有关交叉编译的文章。
答案 0 :(得分:4)
我不确定这是否有帮助..但是这里......
在Go中开发我的第一个正确的网络应用程序时,您的确切情况是我目前每天都在做的事情。我开发的是Windows笔记本电脑(虽然在工作中很无聊......我是我工作场所的.NET开发人员!)和家里的Mac。然后我将它部署到Digital Ocean托管的Ubuntu服务器上。
我的工作流程是:
go build
服务器上的代码go get
它抱怨我在服务器上没有的任何库(例如,gorilla/mux
今天在服务器上没有,所以我只是运行了<) / LI>
go build
再次(如适用)..然后在服务器上运行它。
当从这个工作流程开始时(我仍然试图用bash脚本等完善...)我发现跨环境的一致GOPATH
确实有帮助。
例如,每台计算机上的GOPATH
为:
C:\GOPATH
~/go-code/
/home/simon/go-code/
每个人都有完全相同的结构:
...等。这大大简化了整个过程,使我能够无缝地在3个环境中进行开发。
我仍然习惯Go和这个设置(作为我的核心.NET开发人员) - 但它现在似乎正在做这个技巧。
答案 1 :(得分:4)
简单易用的方法是在Mac上交叉编译Linux amd64二进制文件,然后使用scp / Fabric /其他选择工具将二进制文件推送到服务器。然后没有必要获取deps(并冒险破坏事物),在您的服务器上构建任何东西:您只需发送二进制文件。
选项1 :http://dave.cheney.net/2012/09/08/an-introduction-to-cross-compilation-with-go - 然后使用go-linux-amd64 build
或直接设置环境变量(根据以下选项)构建二进制文件。
选项2 :使用Homebrew brew install go --cross-compile-common
安装Go然后运行GOOS=linux GOARCH=amd64 go build
- 或使用-o
标志指定不同的输出文件名。我通常输出我的myapp-linux
,因此它不会覆盖平台本机二进制文件。
答案 2 :(得分:-1)
在类似情况下,我想在mac上编码并在Linux上部署。这种快速而肮脏的方式适用于Go 1.6.2 http://kumargaurav.co/2016/08/10/deploy-go-lang-app-linux-server/