Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jemallocSupport with gems #118

Open
emptyflask opened this issue Apr 8, 2024 · 2 comments
Open

jemallocSupport with gems #118

emptyflask opened this issue Apr 8, 2024 · 2 comments

Comments

@emptyflask
Copy link

I'm attempting to enable jemalloc with ruby, which appears to work fine, but it isn't available to gems. I thought that maybe since it was in ruby's propagatedBuildInputs, the gems would have it, but no.

        pkgs = import nixpkgs {
          inherit system;
          overlays = [ bob-ruby.overlays.default ];
        };
        rubyNix = ruby-nix.lib pkgs;
        gemset = if builtins.pathExists ./gemset.nix then import ./gemset.nix else { };
        rubyVersion = nixpkgs.lib.fileContents ./.ruby-version;

        ruby = pkgs."${rubyVersion}".override {
          jemallocSupport = true;
          yjitSupport = true;
        };

I wrote a function to add it to each gem's buildInputs, but merging that with defaultGemConfig replaces the existing builtInputs, so perhaps a "deep merge" is needed instead:

        jemallocGemConfig = builtins.listToAttrs (map (name: {
          inherit name;
          value = attrs: attrs // { buildInputs = (attrs.buildInputs or []) ++ [ pkgs.jemalloc ]; };
        }) (builtins.attrNames gemset));
      in rec {
        inherit (rubyNix {
          inherit gemset ruby;
          name = "chronos";
          gemConfig = pkgs.defaultGemConfig // jemallocGemConfig;
        }) env;
        devShells = rec {
          dev = pkgs.mkShell { buildInputs = [ env ] };
          default = dev;
        };
      };

But I'm probably thinking about this the wrong way. Surely there's some better/simpler way to use jemalloc with gems. I can try posting this to the bundix repo as well if that makes more sense.

@bobvanderlinden
Copy link
Owner

I'm not fully aware of how ruby-nix should work, but from the code it seems the ruby package that is supplied isn't really being used.

See the unused deconstructed attribute ruby in https://github.com/inscapist/ruby-nix/blob/a9a0f7d7605abca80e40fa3627b7e9cb9e639441/modules/gems/default.nix#L3C3-L3C7.
ruby needs to be supplied to buildRubyGem.

It doesn't seem to have to do with nixpkgs-ruby.

@inscapist
Copy link
Contributor

hey @bobvanderlinden thanks for pointing out the unused ruby. And sorry for being late to the scene.

This has been fixed in inscapist/ruby-nix#41

Also, it would not work out of the box until jemalloc is added to propagatedBuildInputs, it is currently added to buildInputs, I have filed another PR for that

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants