Linux 在我的服务器上部署和构建我的go应用程序

Linux 在我的服务器上部署和构建我的go应用程序,linux,macos,git,go,Linux,Macos,Git,Go,我完全是新手(顺便说一句,它看起来棒极了) 所以我想在revel框架中构建一个“web-”应用程序。问题是我在mac电脑(os:darwin,arch:amd64)上编写代码,我想在我的服务器(os:ubuntu 12.04,arch:amd64)上部署应用程序。 我“go-get”沉迷于本地(所以它是一个:Mach-O 64位可执行文件),在我的服务器上是不可执行的 现在,当我推(使用git)时,我有一个post接收脚本来构建应用程序(revel build myapp/path/to/dep

我完全是新手(顺便说一句,它看起来棒极了)

所以我想在revel框架中构建一个“web-”应用程序。问题是我在mac电脑(os:darwin,arch:amd64)上编写代码,我想在我的服务器(os:ubuntu 12.04,arch:amd64)上部署应用程序。 我“go-get”沉迷于本地(所以它是一个:Mach-O 64位可执行文件),在我的服务器上是不可执行的

现在,当我推(使用git)时,我有一个post接收脚本来构建应用程序(
revel build myapp/path/to/deploy
)。在我尝试在我的服务器上“go-get”revel之前,它也失败了

它不起作用,我能理解为什么,但我不知道如何获得可行的工作流程:

  • 我的mac电脑上的代码
  • 推送我的代码(使用git)
  • 在服务器上构建应用程序

  • 附:我读过,也读过关于交叉编译的文章)

    我不确定这是否有帮助。。但这是

    你的确切情况就是我在Go中开发第一个合适的web应用程序时每天都在做的事情。我在Windows笔记本电脑上(在工作无聊的时候..我在工作场所是.NET开发人员!)和家里的Mac电脑上开发。然后我将它部署到一个托管在Digital Ocean上的Ubuntu服务器上

    我的工作流程是:

    • 做任何改变
    • 提交到存储库(BitBucket)
    • 从repo(无论在哪里-例如,在我的Ubuntu服务器上)拉取
    • 开始构建
      服务器上的代码
    • go-get
      它抱怨的任何我在服务器上没有的库(例如,
      gorilla/mux
      今天不在服务器上,所以我只是运行了它)
    • 再次构建
      (如果适用)
    …然后在服务器上运行它

    从这个工作流开始(我仍在尝试用bash脚本等完善它)时,我发现跨环境的一致的
    GOPATH
    确实有帮助

    例如,每台机器上的my
    GOPATH
    为:

    • Windows:
      C:\GOPATH
    • Mac:
      ~/go code/
    • Linux:
      /home/simon/go code/
    它们都有完全相同的结构:

    • $GOPATH
      • src
        • github.com/
          • 大猩猩/
          • 狂欢/
          • 等等/
        • 西蒙

          • WebApp1简单、易于测试的方法是在Mac上交叉编译Linux amd64二进制文件,并使用此处选择的scp/Fabric/其他工具将该二进制文件推送到服务器上。然后就不需要获取dep(并冒着破坏东西的风险),在服务器上构建任何东西:只需发送一个二进制文件

            选项1:-然后使用
            go-linux-amd64 build
            或直接设置环境变量(根据以下选项)构建二进制文件


            选项2:使用自制
            brew安装Go-交叉编译公共文件
            ,然后运行
            GOOS=linux GOARCH=amd64 Go build
            -或使用
            -o
            标志指定不同的输出文件名。我通常将我的输出为
            myapplinux
            ,这样它就不会覆盖平台本机二进制文件

            在类似的情况下,我想在mac上编写代码并在Linux上部署。这种快速而肮脏的方式在Go 1.6.2上对我很有效

            如果你读过关于交叉编译和部署的文章,你的问题是什么?到底是什么让你失败了?一开始我是这样做的:在没有revel的情况下推我的项目,并使用我的post receive来管理我现有的目录,然后尝试获取revel。我有一个错误“不是git存储库”。现在我想我可以交叉编译我的项目,但是revel(我现在提交)是一个Mach-O64位,我不能用post-receive执行它。因此,我想知道如何设置一个工作流来使用这些参数部署我的应用程序(在mac os x上编码并在ubuntu 12.04上运行)。对不起,我不太准确。我同意在当地建造。我们发现让服务器构建应用程序是个坏消息,容易出错,而且很难自动化。是的+1。正如我在回答中所说,我仍然习惯于围棋生态系统,所以我的过程不是最好的,但目前对我来说是可行的。谢谢@Peter的回复。唯一有效的方法是交叉编译。非常感谢您的回复和解释。它现在对我很好,我能够在我的服务器上部署我的构建应用程序。我将使用您的工作流程。