2012-09-29 24 views
1

所以這裏是我的問題:RVM爲什麼不把gem安裝到本地項目文件夾?

我有一個項目,我想在本地安裝Gems到該項目。例如,如果我從Gemfile安裝設備,然後運行軟件包安裝,它不會將任何控制器放在項目的控制器目錄中。相反,我必須通過RVM目錄尋找特定的gem控制器,將它們複製到我的項目中,然後從那裏開始編寫我的項目。

有什麼建議嗎?

+1

軟件包不應該將寶石代碼安裝到您的應用程序代碼中。在Devise的情況下,它是控制器,視圖,模型以及其他任何將保留在gem本身中的東西。如果你需要重寫某些東西,比如視圖,Devise有一個內置的生成器,將視圖放到你的應用程序的'rails generate devise:views'中。寶石是用來隔離你自己的庫代碼的。您是否有理由需要訪問Devise的控制器?作爲一個經驗法則,你不應該直接改變Devise的代碼。 –

+0

因此,例如應該與Devise安裝來的users_controller不應該在我的應用程序控制器中呢?這很奇怪... –

+0

是的,這是正確的。如果你正確設置你的路線,並且正確安裝了Devise,它就會知道該怎麼做,而Users控制器會做這些事情。它不需要直接存在於您的應用程序中。 –

回答

2

我認爲上面的評論回答了你的問題 - 當你將Devise添加到你的應用程序時,它通常不直接將代碼直接放入你的應用程序。有時候它會提供一個生成器來安裝它的某些部分,但大多數情況下它會改變配置文件,以便在啓動時將gem中的代碼拉入您的應用程序。

您可以要求bundler在您的應用程序的「vendor」子目錄中安裝gem,而不是在主RVM/Ruby位置中使用--path選項。但是你通常只想做生產部署而不是開發。

+0

好吧...所以如果我想部署到遠程服務器,我會做一個捆綁安裝 - 路徑,然後它會爲我包裝所有這些?這非常漂亮。我只是擔心,我對Rails很陌生,看起來很簡單,但在其他時候似乎相對複雜。感謝您的幫助,真的很感激! –

+0

這是對的,它很漂亮。 ;)只要運行'bundle install',Bundler就會照顧你所有的依賴關係,不管你是在服務器上還是在本地開發。如果您在服務器上運行多個應用程序,那麼考慮添加RVM以保持它們很好地隔離是明智的。 –

+0

'bundle install'會將您的依賴關係安裝在原始問題的默認位置 - 深入到RVM中。 'bundle install --path vendor/bundle'將它們全部放在項目中的那個目錄中。使得在同一臺服務器上將不同應用程序之間的寶石分隔開的好方法成爲可能。 – dpassage

相關問題