Ruby development on Nix

I recently worked on ways to work with Ruby projects for development (and potentially deployment) purposes. I found flakes to be working quite well, so I experimented a bit how it could work for the Rails projects at work.

I came up with nixpkgs-ruby: a Nix flake repository with all Ruby versions available. The repository is automatically updated with new versions of Ruby.

Next I looked at ways to use this flake in existing Rails projects. These projects all use .ruby-version, so I thought I’d use that instead of specifying the version in Nix. This way non-Nix colleagues could still maintain their projects without using Nix.

The result of this is a template that can be used for nix flake init: https://github.com/bobvanderlinden/templates/tree/master/ruby
This allows for the following command:

nix flake init --template github:bobvanderlinden/templates#ruby

It creates a .envrc with use flake. It creates a flake.nix devShell which sources the Ruby version from .ruby-version and takes the right Ruby derivation from nixpkgs-ruby. Lastly it predefined a bundleEnv, so that whenever bundix is called can be easily included.

I hope this can help others as well. I’m interested in the workflows others are using for working with Ruby projects and non-Nix contributors.

8 Likes

This is a huge help. I have to package some Ruby code at work, and have almost no experience with Ruby.

Suffice to say I was struggling with the existing documents and tooling, so this is enormously helpful.