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

そして、この create メソッドを呼び出すコマンドを実行した結果のコンソール出力:

$ 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_appguardguard-coffeescriptguard-less

lsまたはなどの他のコマンドを実行するとpwd、期待される結果が得られます。

Gemfile
Guardfile
README.md
app

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

違いがあるかどうかはわかりませんが、Ruby の管理には RVM を使用しています。

4

2 に答える 2

20

あなたのアプリはすでにバンドラーを使用していて、バンドラー内にバンドラーの問題があるようです。これを試して:

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のバージョン。

次に、bundler gem をインストールします

      gem install bundler.           

次に、サーバーをバンドルしてインストールして実行します..

于 2012-04-17T05:47:11.430 に答える