使用 Nix 在本地构建 GitHub 个页面

Building GitHub pages locally using Nix

我在 NixOS 上,我想在本地构建一些 GitHub 页面。

GitHub seems to indicate 我应该创建一个 Gemfile 包含:

gem "github-pages", group: :jekyll_plugins

Nixpkgs manual section on Ruby 之后,我做了:

$ cat > Gemfile
source 'https://rubygems.org'
gem "github-pages", group: :jekyll_plugins
$ $(nix-build '<nixpkgs>' -A bundix --no-out-link)/bin/bundix --magic

导致 Nokogiri 构建失败:

An error occurred while installing nokogiri (1.8.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.8.1'` succeeds before bundling.

构建失败如下:

zlib is missing; necessary for building libxml2

我已经确认问题出在 运行:

构建 Nokogiri 时
gem install nokogiri -v '1.8.1'

在各种环境中(nix-shell -p zlibnix-shell -p zlibStaticnix-shell -p zlib libxml2nix-shell -p zlib pkgconfig 等)。

从Google上搜索,似乎Nokogiri是一个很常见的依赖(例如Rails依赖它),所以我想大多数人都克服了我遇到的困难。 我错过了什么?

短路径

如果您真正需要的只是构建一个 github 页面,您只需输入 shell 和 nix-shell -p jekyll 然后 jekyll build 因为现在 jekyll 被打包为申请

长路径 当你希望在同一个 Gemfile 中包含 jekyll 和其他 gem 时使用

您可以在此处找到详细说明:Building a Jekyll Environment with NixOS(即使没有任何特定于 NixOS 的内容)

我认为这是 --magic 标志的问题(或者我没有得到它的真正用法)并且它没有使用一些 gem 在 nixpkgs 中的特殊配置。

因此,为了避免出现该标志,您可以(post above 中的完整说明):

  1. 像您一样创建一个裸 Gemfile,没有 'group' 指令

  2. 在 shell 中使用捆绑程序调用 bundler lock 以获得 Gemfile.lock

  3. 不带参数调用bundix获得gemset.nix

  4. 创建一个在 buildInputs 中具有 bundlerEnv 的推导,如手册中所述。

    博客 default.nix 的奖励积分,因为它会在您键入 nix-shell

    时启动 jekyll 本地服务器