2012-03-20 71 views
1

我有一個非常經常性的問題在這裏。 (它始終直接發生)。我已經找到方法去解決它,但我真的很希望得到這個問題的解決方案:Bundler不是「捆綁」的sqlite3

這是怎麼一回事呢:

在我的機器,我在我的寶石文件中像這樣的一行:

gem "sqlite3-ruby", :require => "sqlite3"

發生的事情是,當我安裝捆綁--no部署,它會好嗎:

Using sqlite3 (1.3.5) 
Using sqlite3-ruby (1.3.3) 
Updating .gem files in vendor/cache 
Your bundle is complete! It was installed into ./vendor/bundle

但隨後,在部署,運行捆綁安裝--deployment,我得到:

Using sqlite3-ruby (1.3.3) 
Updating .gem files in vendor/cache 
Your bundle is complete! It was installed into ./vendor/bundle

...這會導致錯誤的要求,使應用程序崩潰。然後,我做的是捆綁在部署機器安裝--no部署。然後我再次運行捆綁安裝 - 部署,然後,神奇地:

Using sqlite3 (1.3.5) 
Using sqlite3-ruby (1.3.3) 
Updating .gem files in vendor/cache

然後應用程序運行良好。

所以,我現在最想基本上是捆綁承認在sqlite3的寶石

回答

1

的sqlite3的依賴性但隨後,在開發,運行捆綁安裝--deployment,我得到:

好的,這是第一個可疑的事情。你爲什麼要開發--deployment

你通常不想這樣做。如果你在同一臺機器上的「部署」和「無部署」之間切換,很容易讓事情混淆,是的。

運行「軟件包安裝 - 部署」將在項目中保存.bundle/config文件中的內容,該文件告訴打包程序「從這裏開始,只安裝這些特定的寶石」。 「--no-deployment」會再次刪除它,以防萬一您犯了錯誤或需要繞開。但總的來說,你不需要也不希望總是來回切換。在生產/部署機器上運行--deployment,不要在開發機器上運行它。你並不需要直接運行--no-deployment除非你犯了一個錯誤,並不意味着--deployment

在這一點上,我會rm -rf .bundle(也沒關係,它會直接刪除所有的東西捆綁「記住」什麼你想要做的,就像--deployment),並從bundle install重新開始。

如果出於某種原因,這是行不通的,那就是這個問題。

從線Updating .gem files in vendor/cache,我懷疑在某些時候,你也跑bundle package,這是公司在.bundle/config事「記住」另一件事,並且還可能與其他命令奇怪的互動和做的事情你不要指望。刪除你的.bundle/config也會擺脫那個記憶的設置。 (你可能還需要刪除你的。/供應商/緩存目錄內容)

只要運行bundle install,除非您有理由理解需要package,並理解它的作用。否則會讓你困惑。

+0

我的意思是部署,而不是開發。儘管如此,你的回答澄清了我的一些東西。我很快就會部署一個新網站,然後我會讓你知道結果。無論如何感謝您的解釋。 – pedrozath 2012-03-20 18:29:48