首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Scala部署到NixOps

将Scala部署到NixOps
EN

Stack Overflow用户
提问于 2016-01-11 20:58:34
回答 1查看 529关注 0票数 4

我正在用NixOS和NixOps在Scala中部署一个带有Play 2 with服务的NixOps。

我有一台机器:

代码语言:javascript
复制
{
  backoffice = {
    deployment.targetEnv = "virtualbox";
    deployment.virtualbox.memorySize = 1024; # MB
  };
}

在这个逻辑网络上:

代码语言:javascript
复制
{
  network.description = "Test";

  backoffice =
    { config, pkgs, ... }:
    let
        callPackage = pkgs.lib.callPackageWith (pkgs);
        Back = callPackage ../pkgs/Backoffice.nix {};
    in {
        environment.systemPackages = [
          pkgs.jdk
          Back
        ];

        systemd.services.backoffice = {
            description = "Backoffice";
            # Start the service after the network is available
            after = [ "network.target" ];
            script = "${Back}/webapps/bin/play-back";
            serviceConfig = {
              Restart = "always";
            };
          };

          networking.hostName = "backoffice";
          networking.firewall.allowedTCPPorts = [ 80 ];
          system.stateVersion = "15.09";
    };
}

其中Backoffice.nix是这样的派生:

代码语言:javascript
复制
with import <nixpkgs> {};

stdenv.mkDerivation {
  name = "Backoffice";
  src = ../../back;
  buildInputs = [ sbt ];
  buildPhase = let
        sbtBootDir = "./.sbt/boot/";
        sbtIvyHome = "/var/tmp/`whoami`/.ivy";
        sbtOpts = "-XX:PermSize=190m -Dsbt.boot.directory=${sbtBootDir} -Dsbt.ivy.home=${sbtIvyHome}";
    in ''
        mkdir -p ${sbtBootDir}
        mkdir -p ${sbtIvyHome}
        sbt ${sbtOpts} stage
    '';

  installPhase = ''
    mkdir -p $out/webapps
    cp -ra ./target/universal/stage/* $out
  '';
}

VM启动并部署良好。但是,当我深入到其中时,我无法在其中找到我的Backoffice派生。

如果我在本地做

代码语言:javascript
复制
nix-build Backoffice.nix

...it构建时没有问题,我可以在我的dev机器上的/nix/store中找到派生。

在VM中,有一个/nix/store/shaXXX-backoffice.service,所以它可以工作。但是,由于后台派生不存在,它什么也不做。

有人能告诉我我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-13 16:25:41

找到了!在systemd.services.backoffice中需要的是:

代码语言:javascript
复制
path = [ "${pkgs.jdk.home}" "${pkgs.gawk}" ];

Play Framework脚本正在使用这两种方式来启动自身。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34730947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档