Ruby 如何在西纳特拉使用宝石?
我正在构建一个新版本的Facebook应用程序,名为。你可以找到那个。我还在为Facebook打造一个定制的宝石。我希望我对这个定制的Facebook gem所做的更改能够立即对恋人生效 组织目录结构的正确方法是什么?目前看来是这样的:Ruby 如何在西纳特拉使用宝石?,ruby,facebook,sinatra,gem,Ruby,Facebook,Sinatra,Gem,我正在构建一个新版本的Facebook应用程序,名为。你可以找到那个。我还在为Facebook打造一个定制的宝石。我希望我对这个定制的Facebook gem所做的更改能够立即对恋人生效 组织目录结构的正确方法是什么?目前看来是这样的: |- config.ru |- features |- support |- env.rb |- lib |- lovers |= lovers.rb |- vendor | - facebook | - lib |
|- config.ru
|- features
|- support
|- env.rb
|- lib
|- lovers
|= lovers.rb
|- vendor
| - facebook
| - lib
|- modules/classes here
我从
config.ru
&env.rb
向$LOAD\u路径添加了/vendor/facebook/lib
。这是可行的,但是我应该使用init.rb
文件来实现吗?最佳做法是什么?我将使用
创建GEM文件
并定义所有要求。
然后在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"
...
您可以将您的gem放入供应商/facebook
,并按照Simone-Carletti的建议使用Bundler,但您可以使用:path
选项告诉Bundler从何处加载gem,而不是从rubygems中提取您的gem
使用它,您甚至可以在并行开发的同时将gem移出项目树
您的Gemfile
将包含以下内容:
gem 'facebook', :path => '../facebook'
这还有几个其他问题
为了让您使用Bundler管理您的gem,您的gem需要一个.gemspec
文件。gempec指定gem的信息,比如版本和依赖项。看看这本书
已经有一个名为的gem,因此您可能需要为您的gem考虑一个不同的名称
我认为行为驱动开发(BDD)方法是在一个单独的源代码树中构建您的Facebook gem,并使用RSpec或其他测试工具进行测试
一旦Gem达到了功能上有用的迭代,然后按照建议使用Bundler将其包含在应用程序中。为什么?这会不会让Facebook gem的改变变得更加困难,并立即看到这些改变会对恋人产生怎样的影响?因为那样我就得先把Facebook的gem捆绑起来,对吧?对于供应商
目录,更改将立即生效。自己对第三方库进行更改不是一个好主意。这种方法将使升级成为一场噩梦。它不是第三方库。Facebook gem是我和恋人一起构建的一个gem,类似于ActiveRecord是如何与Rails一起构建的。请重读我的问题。为什么是“Ruby方式”,也就是说,为什么是最好的方式?看起来更新Facebook的gem会很痛苦。而且功能永远不会完整。它总是在变化。我真的在描述开发Gem的行为驱动开发方式(我更新了我的答案)。我必须承认,我才刚刚开始使用这种方法。它考虑到了一种长时间的迭代开发方法,这听起来很棒。谢谢我来试试这个。