我正在构建一个名为Lovers的Facebook应用程序的新版本。你可以找到Lovers source code on GitHub。我也在为它建立一个定制的Facebook宝石。我希望我对这个自定义Facebook gem所做的更改立即对Lovers生效。
组织目录结构的正确方法是什么?目前,它看起来像这样:
|- config.ru
|- features
|- support
|- env.rb
|- lib
|- lovers
|= lovers.rb
|- vendor
| - facebook
| - lib
|- modules/classes here
我将./vendor/facebook/lib
添加到了来自$LOAD_PATH
& config.ru
的{{1}} env.rb
。这是有效的,但我应该使用init.rb
文件来执行此操作吗?什么是最佳做法?
答案 0 :(得分: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"
...
答案 1 :(得分:1)
你可以将你的宝石放在vendor/facebook
中,并使用Bundler作为Simone Carletti的建议,但不是从rubygems中提取你的宝石,你可以使用:path
选项,告诉bundler从哪里加载你的宝石。
使用它甚至可以将宝石从项目的树中移出,同时将它们并排开发。
您的Gemfile
将包含以下内容:
gem 'facebook', :path => '../facebook'
还有其他一些问题。
为了让您使用Bundler来管理您的gem,您的gem需要一个.gemspec
文件。 gemspec指定gem的信息,例如版本和依赖项。查看docs on it。
已经有一个名为facebook的宝石,因此您可能需要考虑宝石的不同名称。
答案 2 :(得分:1)
我认为行为驱动开发(BDD)方法是在单独的源代码树中构建您的Facebook gem并使用RSpec或其他一些测试工具对其进行测试。
一旦Gem达到功能上有用的迭代,然后按照建议使用Bundler将其包含在您的应用程序中。