5

我正在thor为一些内部项目构建一个基于简单的生成器,并且似乎无法bundle install从正确的目录运行。

当我运行新的 [APP_NAME] 函数时,它应该创建目录和文件,然后运行bundle install以安装应用程序所需的 gem。

生成器函数的来源:

def create
  puts "Creating application #{name}"

  directory 'application', "#{name}"

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

运行调用此创建方法的命令的控制台输出:

$ 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.

如您所见,它正在运行,bundle install但它在我的当前目录(thorbundlermy_gem)中运行,而不是在test_app目录(guardguard-coffeescriptguard-less和其他目录)中运行。

运行其他命令,例如lspwd给出预期结果:

Gemfile
Guardfile
README.md
app

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

不确定它是否有任何区别,但我使用 RVM 来管理我的红宝石。

4

2 回答 2

20

听起来您的应用程序已经在使用 bundler 并且您遇到了 bundler-inside-bundler 问题。试试这个:

Bundler.with_clean_env do
  puts `bundle install`
end

我猜正在发生的事情是您的外部捆绑器将BUNDLE_GEMFILEenv 变量设置为您的应用程序的 Gemfile,然后您的内部捆绑器最终继承了它。

于 2012-04-23T05:37:31.557 回答
-1

请试试这个,我一定会帮助你。

      rvm gemset create app_name


      rvm use ruby-1.9.2@app_name

Ruby 版本你还用过什么。

然后安装捆绑器 gem

      gem install bundler.           

然后捆绑安装并运行服务器..

于 2012-04-17T05:47:11.430 回答