Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何在西纳特拉使用宝石?_Ruby_Facebook_Sinatra_Gem - Fatal编程技术网

Ruby 如何在西纳特拉使用宝石?

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 |

我正在构建一个新版本的Facebook应用程序,名为。你可以找到那个。我还在为Facebook打造一个定制的宝石。我希望我对这个定制的Facebook gem所做的更改能够立即对恋人生效

组织目录结构的正确方法是什么?目前看来是这样的:

|- 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的行为驱动开发方式(我更新了我的答案)。我必须承认,我才刚刚开始使用这种方法。它考虑到了一种长时间的迭代开发方法,这听起来很棒。谢谢我来试试这个。