2011-02-08 29 views
2

我正在構建一個名爲Lovers的Facebook應用程序的新版本。你可以找到Lovers source code on GitHub。我還爲它製作了Facebook的自定義寶石。我希望我對這個自定義Facebook Gem所做的更改立即生效,以供戀人使用。如何在Sinatra中使用寶石?

什麼是組織其目錄結構的正確方法是什麼?目前,它看起來像這樣:

|- config.ru 
|- features 
    |- support 
    |- env.rb 
|- lib 
    |- lovers 
    |= lovers.rb 
|- vendor 
    | - facebook 
    | - lib 
     |- modules/classes here 

我加./vendor/facebook/lib$LOAD_PATHconfig.ru & env.rb。這工作,但我應該使用init.rb文件來做到這一點?最佳做法是什麼?

回答

1

你可以把你的寶石vendor/facebook,並使用捆紮機爲西蒙娜Carletti酒店建議,但不是從RubyGems的拉動的寶石,你可以使用:path選項,告訴打捆從哪裏加載的寶石。

使用你甚至可以移動的寶石你的項目的樹,而成分共同發展他們的一面。

Gemfile將包含這樣的內容:

gem 'facebook', :path => '../facebook' 

有一對夫婦的其他問題與此有關。

  1. 爲了讓您使用捆紮機來管理你的寶石,你的寶石需要.gemspec文件。 gemspec指定您的寶石信息,如版本和依賴關係。檢查出docs on it

  2. 已經有一個名爲facebook寶石,所以你可能需要考慮一下你的寶石不同的名稱。

2

而是創建一個文件夾vendor的,我會用Bundler

創建Gemfile並定義的所有要求。 然後在您lovers.rb文件放在下面的代碼

require "rubygems" 
require "bundler/setup" 

Bundler.require(:default, (ENV["RACK_ENV"] || :development).to_sym) 

我通常創建一個文件boot.rb在根文件夾和移動代碼中有添加lib負載路徑。

# boot.rb 
$:.unshift(File.dirname(__FILE__) + "/lib") 

require "rubygems" 
require "bundler/setup" 

Bundler.require(:default, (ENV["RACK_ENV"] || :development).to_sym) 


# lib/lovers.rb 

require "boot" 
... 
+0

爲什麼?難道這不會讓更難改變Facebook的寶石,並立即看到這些變化將如何影響戀人?因爲那我必須先把Facebook的寶石捆綁起來,對吧?通過「vendor」目錄,更改將立即生效。 – ma11hew28 2011-02-09 01:50:49

+0

自己修改第三方庫不是一個好主意。這種方法將使升級成爲真正的噩夢。 – 2011-02-09 09:31:56

+0

這不是第三方庫。 Facebook gem是我與Lovers一起構建的寶石,類似於ActiveRecord如何與Rails一起構建。請重新閱讀我的問題。 – ma11hew28 2011-02-10 01:28:00

1

我認爲驅動開發(BDD)的做法行爲將建立自己的Facebook的寶石在一個單獨的源代碼樹,並使用RSpec或其他一些測試工具進行測試。

一旦創業板達到了功能實用的迭代,然後將其包含在使用捆紮機您的應用程序的建議。