diff --git a/doc/languages-frameworks/ruby.xml b/doc/languages-frameworks/ruby.xml
index a2b4475a4a54..d81422b610ee 100644
--- a/doc/languages-frameworks/ruby.xml
+++ b/doc/languages-frameworks/ruby.xml
@@ -42,5 +42,37 @@ and scalable.";
Please check in the Gemfile, Gemfile.lock and the gemset.nix so future updates can be run easily.
+Resulting derivations also have two helpful items, env and wrapper. The first one allows one to quickly drop into
+nix-shell with the specified environment present. E.g. nix-shell -A sensu.env would give you an environment with Ruby preset
+so it has all the libraries necessary for sensu in its paths. The second one can be used to make derivations from custom Ruby scripts which have
+Gemfiles with their dependencies specified. It is a derivation with ruby wrapped so it can find all the needed dependencies.
+For example, to make a derivation my-script for a my-script.rb (which should be placed in bin) you should
+run bundix as specified above and then use bundlerEnv lile this:
+
+
+
+
+
diff --git a/pkgs/development/interpreters/ruby/bundler-env/default.nix b/pkgs/development/interpreters/ruby/bundler-env/default.nix
index c7570d815e3b..fdafa5f8f126 100644
--- a/pkgs/development/interpreters/ruby/bundler-env/default.nix
+++ b/pkgs/development/interpreters/ruby/bundler-env/default.nix
@@ -65,8 +65,24 @@ let
"${bundler}/${ruby.gemPath}" \
${shellEscape (toString envPaths)}
'' + lib.optionalString (postBuild != null) postBuild;
- passthru = {
+ passthru = rec {
inherit ruby bundler meta gems;
+
+ wrapper = stdenv.mkDerivation {
+ name = "wrapper-${name}";
+ nativeBuildInputs = [ makeWrapper ];
+ buildCommand = ''
+ mkdir -p $out/bin
+ for i in ${ruby}/bin/*; do
+ makeWrapper "$i" $out/bin/$(basename "$i") \
+ --set BUNDLE_GEMFILE ${confFiles}/Gemfile \
+ --set BUNDLE_PATH ${bundlerEnv}/${ruby.gemPath} \
+ --set GEM_HOME ${bundlerEnv}/${ruby.gemPath} \
+ --set GEM_PATH ${bundlerEnv}/${ruby.gemPath}
+ done
+ '';
+ };
+
env = let
irbrc = builtins.toFile "irbrc" ''
if !(ENV["OLD_IRBRC"].nil? || ENV["OLD_IRBRC"].empty?)
@@ -77,12 +93,8 @@ let
'';
in stdenv.mkDerivation {
name = "interactive-${name}-environment";
- nativeBuildInputs = [ ruby bundlerEnv ];
+ nativeBuildInputs = [ wrapper bundlerEnv ];
shellHook = ''
- export BUNDLE_GEMFILE=${confFiles}/Gemfile
- export BUNDLE_PATH=${bundlerEnv}/${ruby.gemPath}
- export GEM_HOME=${bundlerEnv}/${ruby.gemPath}
- export GEM_PATH=${bundlerEnv}/${ruby.gemPath}
export OLD_IRBRC="$IRBRC"
export IRBRC=${irbrc}
'';