nix-community / bundix

Generates a Nix expression for your Bundler-managed application. [maintainer=@manveru]
160 stars 54 forks source link

irb doesn't work when using gemspec in the Gemfile. #76

Open Sean1708 opened 3 years ago

Sean1708 commented 3 years ago

With the following files in a directory

# Gemfile
source 'https://rubygems.org'

gemspec
# foo.gemspec
Gem::Specification.new do |spec|
    spec.name = 'foo'
    spec.version = '0.0.0'
    spec.authors = ["me"]
    spec.summary = "A gem."
end
# shell.nix
let
  pkgs = import <nixpkgs> { };
  environment = pkgs.bundlerEnv {
    name = "foo";

    inherit (pkgs) ruby;
    gemdir = ./.;
  };
in environment.env

running

$(nix-build '<nixpkgs>' -A bundix --no-out-link)/bin/bundix --magic

succeeds and produces

# .bundle/config 
---
BUNDLE_PATH: "vendor/bundle"
BUNDLE_CACHE_ALL: "true"
# Gemfile.lock 
PATH
  remote: .
  specs:
    foo (0.0.0)

GEM
  remote: https://rubygems.org/
  specs:

PLATFORMS
  ruby

DEPENDENCIES
  foo!

BUNDLED WITH
   2.1.4
# gemset.nix 
{
  foo = {
    groups = ["default"];
    platforms = [{
      engine = "maglev";
    } {
      engine = "maglev";
    } {
      engine = "maglev";
      version = "1.8";
    } {
      engine = "maglev";
      version = "1.8";
    } {
      engine = "maglev";
      version = "1.9";
    } {
      engine = "maglev";
      version = "1.9";
    } {
      engine = "maglev";
      version = "2.0";
    } {
      engine = "maglev";
      version = "2.0";
    } {
      engine = "maglev";
      version = "2.1";
    } {
      engine = "maglev";
      version = "2.1";
    } {
      engine = "maglev";
      version = "2.2";
    } {
      engine = "maglev";
      version = "2.2";
    } {
      engine = "maglev";
      version = "2.3";
    } {
      engine = "maglev";
      version = "2.3";
    } {
      engine = "maglev";
      version = "2.4";
    } {
      engine = "maglev";
      version = "2.4";
    } {
      engine = "maglev";
      version = "2.5";
    } {
      engine = "maglev";
      version = "2.5";
    } {
      engine = "maglev";
      version = "2.6";
    } {
      engine = "maglev";
      version = "2.6";
    } {
      engine = "rbx";
    } {
      engine = "rbx";
    } {
      engine = "rbx";
      version = "1.8";
    } {
      engine = "rbx";
      version = "1.9";
    } {
      engine = "rbx";
      version = "2.0";
    } {
      engine = "rbx";
      version = "2.1";
    } {
      engine = "rbx";
      version = "2.2";
    } {
      engine = "rbx";
      version = "2.3";
    } {
      engine = "rbx";
      version = "2.4";
    } {
      engine = "rbx";
      version = "2.5";
    } {
      engine = "rbx";
      version = "2.6";
    } {
      engine = "ruby";
    } {
      engine = "ruby";
    } {
      engine = "ruby";
    } {
      engine = "ruby";
      version = "1.8";
    } {
      engine = "ruby";
      version = "1.8";
    } {
      engine = "ruby";
      version = "1.9";
    } {
      engine = "ruby";
      version = "1.9";
    } {
      engine = "ruby";
      version = "2.0";
    } {
      engine = "ruby";
      version = "2.0";
    } {
      engine = "ruby";
      version = "2.1";
    } {
      engine = "ruby";
      version = "2.1";
    } {
      engine = "ruby";
      version = "2.2";
    } {
      engine = "ruby";
      version = "2.2";
    } {
      engine = "ruby";
      version = "2.3";
    } {
      engine = "ruby";
      version = "2.3";
    } {
      engine = "ruby";
      version = "2.4";
    } {
      engine = "ruby";
      version = "2.4";
    } {
      engine = "ruby";
      version = "2.5";
    } {
      engine = "ruby";
      version = "2.5";
    } {
      engine = "ruby";
      version = "2.6";
    } {
      engine = "ruby";
      version = "2.6";
    }];
    source = {
      path = ./.;
      type = "path";
    };
    version = "0.0.0";
  };
}

Finally running nix-shell --run irb gives the following error:

[!] There was an error parsing `Gemfile`: There are no gemspecs at /nix/store/lf2ccppcgbprijr89vkyxkg1sjx8cr59-gemfile-and-lockfile. Bundler cannot continue.

 #  from /nix/store/lf2ccppcgbprijr89vkyxkg1sjx8cr59-gemfile-and-lockfile/Gemfile:3
 #  -------------------------------------------
 #  
 >  gemspec
 #  -------------------------------------------

If instead the files are

# Gemfile
source 'https://rubygems.org'
# shell.nix
let
  pkgs = import <nixpkgs> { };
  environment = pkgs.bundlerEnv {
    name = "foo";

    inherit (pkgs) ruby;
    gemdir = ./.;
  };
in environment.env

then

$(nix-build '<nixpkgs>' -A bundix --no-out-link)/bin/bundix --magic

produces

# .bundle/config 
---
BUNDLE_PATH: "vendor/bundle"
BUNDLE_CACHE_ALL: "true"
# Gemfile.lock 
GEM
  remote: https://rubygems.org/
  specs:

PLATFORMS
  ruby

DEPENDENCIES

BUNDLED WITH
   2.1.4
# gemset.nix    
{
}

and nix-shell --run irb works correctly.

Hopefully it goes without saying that the same behaviour occurs when I do use some actual dependencies!

jaen commented 3 years ago

Encountering thesame behaviour here

melg8 commented 3 years ago

Encountered same problem.

floehopper commented 2 years ago

I'm seeing something similar. This issue looks closely related to https://github.com/nix-community/bundix/issues/73.