Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bundle install runs from incorrect directory

I'm building a simple thor based generator for some internal projects, and can't seem to get bundle install running from the correct directory.

As I run the new [APP_NAME] function, it should create the directories and files, then run bundle install to install the gems required for the application.

The source of the generator function:

def create
  puts "Creating application #{name}"

  directory 'application', "#{name}"

  Dir.chdir("#{Dir.pwd}/#{name}") do
    puts `bundle install`
  end
end

And the console output from running the command that calls this create method:

$ bundle exec bin/my_gem new test_app
Creating application test_app
      create  test_app
      create  test_app/Gemfile
      create  test_app/Guardfile
      create  test_app/README.md
      create  test_app/app/controllers
      create  test_app/app/helpers
      create  test_app/app/models
      create  test_app/app/views
Using thor (0.14.6) 
Using my_gem (0.0.1) 
Using bundler (1.1.3) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

As you can see, it is running bundle install but it's running it in my current directory (thor, bundler, my_gem), as opposed to the test_app directory (guard, guard-coffeescript, guard-less, and others) .

Running other commands such as ls or pwd give the expected results:

Gemfile
Guardfile
README.md
app

and

/Users/davidlumley/Development/Gems/my_gem/test_app

Not sure if it makes any difference, but I use RVM for managing my rubies.

like image 552
djlumley Avatar asked Apr 17 '12 05:04

djlumley


1 Answers

Sounds like your app is already using bundler and you have a bundler-inside-bundler problem. Try this:

Bundler.with_clean_env do
  puts `bundle install`
end

I'm guessing what's happening is that your outer bundler sets the BUNDLE_GEMFILE env variable to your app's Gemfile, and then your inner bundler ends up inheriting it.

like image 125
avaynshtok Avatar answered Oct 14 '22 17:10

avaynshtok