我有以下:help netrw-hiding
(设置我的开发环境,没有NixOS):
shell.nix
PostGIS需要一个版本参数。我不确定如何传递该参数。无论我使用with import <nixpkgs> {};
stdenv.mkDerivation {
name = "my-shiny-project";
buildInputs = [
jq
nodejs-6_x
#postgis {version="2.3.1";}
#postgis ("2.3.1")
#postgis "2.3.1"
postgresql96
zsh
];
shellHook = ''
export SHELL=zsh
export PATH="$PWD/node_modules/.bin/:$PATH"
'';
}
,postgis{version="2.3.1";}
还是postgis("2.3.1")
,我都会收到以下错误:
错误:无法将字符串强制转换为字符串,位于/nix/store/0rj9y7gvzzahp93cvdmrwc2v2aznh61p-nixpkgs-18.03pre118061.69607d7662/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:98:11
在Nameless and single parameter section of functions and imports Nix pill中,我看到调用函数的语法只是postgis "2.3.1"
。
我需要添加什么来NAME PARAM
才能为特定版本的PostgreSQL安装PostGIS?
答案 0 :(得分:0)
鉴于postgresql旨在用作服务,这真的是一个黑暗的刺,但它只能作为一个包提供给你,因为你不在NixOS上。但试试这个:
extraPlugins
postgis包不会产生派生,因此它的输出不能直接使用。相反,它会生成一个包含两个版本属性的集合:2.3.1和2.4.0。
以上可能根本不起作用。问题是postgis通常通过services.postgresql.extraPlugins = [ (pkgs.postgis.override { postgresql = pkgs.postgresql95; }).v_2_3_1 ];
属性提供给postgresql,如下所示:
with import <nixpkgs> {};
let
pg = postgresql96;
postgresqlWithPlugins =
buildEnv {
name = "postgresql-and-plugins-${(builtins.parseDrvName pg.name).version}";
paths = [ pg pg.lib (postgis.override { postgresql = pg; }).v_2_3_1) ];
buildInputs = [ makeWrapper ];
postBuild =
''
mkdir -p $out/bin
rm $out/bin/{pg_config,postgres,pg_ctl}
cp --target-directory=$out/bin ${pg}/bin/{postgres,pg_config,pg_ctl}
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
'';
};
in
stdenv.mkDerivation {
name = "my-shiny-project";
buildInputs = [
jq
nodejs-6_x
postgresqlWithPlugins
zsh
];
shellHook = ''
export SHELL=zsh
export PATH="$PWD/node_modules/.bin/:$PATH"
'';
}
这会导致postgresql的安装方式使其能够查看 postgis库。但是,这是在服务级别而不是包级别完成的,并且服务仅适用于NixOS。因此,如果上述方法无效,请尝试以下代码:
extraPlugins
基本上,这是keys
实施的未经测试的端口。
答案 1 :(得分:0)
最近可以使用postgresql.withPackages
:
with import <nixpkgs> {};
mkShell {
buildInputs = [
jq
nodejs
( postgresql11.withPackages (p: [ p.postgis ]) )
zsh
];
shellHook = ''
export SHELL=${zsh}/bin/zsh
export PATH="${builtins.toPath ./.}/node_modules/.bin/:$PATH"
export PGDATA=${builtins.toPath ./.}/pg
export PGHOST=$PGDATA
pg_ctl initdb
pg_ctl -o "-p 5555 -k $PGDATA" start
psql -p 5555 postgres -c 'create extension postgis' || true
'';
}