2012-10-22 24 views
4

例如,我正在開發一個gem,在開發過程中,我使用pry而不是IRB和debugger進行調試。但是,我不希望可能的貢獻者必須安裝它們(因爲它們可能不需要它們)。我的第一個想法是把他們捆紮機組:是否可以在Gemfile之外要求文件?

source :rubygems 

gemspec 

group :extras do 
    gem "pry" 
    gem "debugger" 
end 

然後人們就可以使用:

$ bundle install --without extras 

但我想這是一個默認的是他們沒有安裝。什麼是完美的是,他們是而不是在我的Gemfile,但我仍然可以要求他們(如果他們存在於電腦上)。這個解決方案可以,因爲我不在乎他們被鎖定的版本。可以做到嗎?

+0

只是想了解'bundle --without'選項有什麼問題,然後在git中添加'.bundle'目錄,這樣任何其他用戶每次執行'bundle install',它都會在內部執行 - 沒有 – Viren

+1

然後他們可以選擇安裝所有':extras'或者什麼也不做。我希望他們能夠通過將它們安裝在磁盤上來選擇想要使用的寶石。也許貢獻者想使用'pry',但不使用'debugger'。 –

回答

0

bundle install是「選擇退出」 - 只要您指定--without some_group,它會安裝所有內容。

如果你絕對不想在你的Gemfile中有一個給定的寶石,那麼可能只是gem install那個流氓寶石在你的捆綁之外。然後,您將在irb和直接ruby(但顯然如果您在bundle exec下運行的代碼中嘗試使用require)會看到錯誤。

+0

這可能是一個有用的解釋:http://yehudakatz.com/2010/05/09/the-how-and-why-of-bundler-groups/ – pje

+0

我不想讓他們在'Gemfile'因爲它們不是開發所必需的。但是我希望貢獻者能夠在需要時使用他們,並且他們可以選擇哪一個。 那麼,沒有辦法要求那些不在'Gemfile'中的寶石? –

0

您可以將基於環境變量的條件添加到Gemfile中。例如:

source :rubygems 

gemspec 

if ENV['WITH_EXTRAS'] == '1' 
    gem "pry" 
    gem "debugger" 
end 

的寶石然後只安裝/加載,如果設置的環境變量來'1'例如WITH_EXTRAS=1 bundle install

相關問題