Как использовать драгоценный камень в Синатре? - PullRequest
2 голосов
/ 08 февраля 2011

Я создаю новую версию приложения для Facebook под названием Lovers .Вы можете найти исходный код Lovers на GitHub .Я также создаю собственный драгоценный камень для Facebook вместе с ним.Я хочу, чтобы изменения, внесенные в этот пользовательский гем Facebook, сразу вступили в силу для любовников.

Как правильно организовать структуру каталогов?В настоящее время это выглядит так:

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

Я добавил ./vendor/facebook/lib к $LOAD_PATH из config.ru & env.rb.Это работает, но я должен использовать файл init.rb для этого?Какая лучшая практика?

Ответы [ 3 ]

2 голосов
/ 08 февраля 2011

Вместо создания папки 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 голос
/ 10 февраля 2011

Я думаю, что подход, основанный на поведенческом развитии (BDD), заключался бы в том, чтобы собрать ваш драгоценный камень Facebook в отдельном дереве исходных текстов и протестировать его с помощью RSpec или другого тестового набора.

Как только Gem достиг функционально полезной итерации, затем включите его в свое приложение, используя предложенный Bundler.

1 голос
/ 10 февраля 2011

Вы можете поместить свой драгоценный камень в vendor/facebook и использовать Bundler, как предложила Симона Карлетти, но вместо того, чтобы извлекать свой драгоценный камень из rubygems, вы можете использовать опцию :path, чтобы указать сборщику, куда загрузить свой драгоценный камень из.

Используя это, вы даже можете переместить драгоценный камень из дерева вашего проекта, разрабатывая их рядом.

Ваш Gemfile будет содержать что-то вроде:

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

Есть несколько других проблем с этим.

  1. Чтобы использовать Bundler для управления своим драгоценным камнем, вашему драгоценному камню необходим файл .gemspec. Gemspec определяет информацию о вашем драгоценном камне, такие как версия и зависимости. Проверьте документы на нем .

  2. Уже есть драгоценный камень с именем facebook , так что вы можете подумать о другом имени для вашего драгоценного камня.

...