2014-11-06 6 views
3

Я пытаюсь понять, куда должны идти камни. Я написал сценарий ruby, который я пытаюсь преобразовать в драгоценный камень. Я использовал спутник для создания скелета для своего драгоценного камня.Где я должен поместить свой камень в свой развивающийся камень?

Теперь у меня есть 2 файла «Gemfile» и «mygem.gemspec».

В моем Gemfile я получил 2 линии говоря:

source 'https://rubygems.org' 

# Specify your gem's dependencies in cudruby.gemspec 
gemspec 

ого в моем 'mygem.gemspec' я получил:

# coding: utf-8 
lib = File.expand_path('../lib', __FILE__) 
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 
require 'mygem/version' 

Gem::Specification.new do |spec| 
    spec.name   = "mygem" 
    spec.version  = Mygem::VERSION 
    spec.authors  = ["mygem"] 
    spec.email   = ["[email protected]"] 
    spec.summary  = %q{mygem} 
    spec.description = %q{mygem} 
    spec.homepage  = "http://www.mygem.com" 
    spec.license  = "MIT" 

    spec.files   = Dir["{lib}/**/*.rb", "bin/*", "LICENSE", "*.md"] 
    spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } 
    spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 
    spec.require_paths = ["lib"] 

    spec.add_development_dependency "bundler", "~> 1.6" 
    spec.add_development_dependency "rake" 
end 

теперь мой рубиновый скрипт, используемый, чтобы полагаться на 3 драгоценных камнях , 'facter', 'debugger', 'json'.

Где их добавить? И как?

Я нашел это: http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

Теперь парень говорит (по ссылке):.

«При разработке жемчужину, используйте gemspec метод в Gemfile, чтобы избежать дублирования в целом, Gemfile драгоценного камня должна содержать источник Rubygems и один gemspec линию ...»

так что я оставил свой gemspec файл, как это было ..

I C Официальный репозиторий hecked facter и его Gemfile является: https://github.com/puppetlabs/facter/blob/master/Gemfile

..и его gemspec является: https://github.com/puppetlabs/facter/blob/master/.gemspec

теперь, почему не у него есть свои драгоценные камни в Gemfile, и ничто в gemspec? Он просто делает прямо противоположное тому, что я читаю.

Может ли кто-нибудь объяснить это мне, пожалуйста?

Спасибо!

ответ

2

одной важной деталью является то, что Gemfile и mygem.gemspec рубин файлы. Это означает, что вы обладаете большой гибкостью и можете делать все по-разному, при условии, что bundle и gem получают необходимые данные. Однако стоит упомянуть стандартные примеры из недавней документации, этот код, как правило, чище и проще в использовании.

Метод gemspec в Gemfile удобный способ сказать Bundler «этот проект использует список драгоценных камней, определенных в gemspec» - т.е. он избегает вас нуждаясь в список зависимостей дважды - для включения bundle install и позволить драгоценный камень для автоматической установки его зависимостей.

Где добавить данные? В конце gemspec, например, так:

spec.add_development_dependency "rake" 

    # Example of one of your dependencies 
    spec.add_dependency "facter", ">= 2.3.0" 
end 

В идеале вы должны передать минимальную версию, вы наверняка будет работать бесплатно ошибка с драгоценным камнем.

Вы не должны использовать камень gem в качестве шаблона или примера, там что-то нестандартное. Для начала .gemspec, который вы связываете, является не gemspec факсора, используемого для создания драгоценного камня. По крайней мере частично это происходит из долгой истории этого драгоценного камня, которому почти 10 лет. Когда это было впервые написано, набор инструментов bundler и gem не был таким, как сейчас.


Это не прямой вопрос, но стоит отметить, для полноты картины:

Перечисления зависимостей являются для Bundler (в Gemfile) и гем здания/установки (в .gemspec). Они не автоматически включают в себя иждивенцы в вашем коде. Поэтому вам также необходимо добавить в свой источник ruby ​​require, как и раньше.

+0

Хорошо, спасибо большое. Тем не менее, я все еще немного смущен. Итак, скажем, кто-то устанавливает мой драгоценный камень, выполнив «gem install mygem», который также установит любые драгоценные камни в gemspec правильно? что, если пользователь уже имеет фактору, но имеет другую версию? и еще раз в этом случае Gemfile используется в драгоценном камне? когда кто-нибудь будет использовать 'bundle install' для установки драгоценного камня? U использует вас, чтобы установить intell gems из gemfile, как правило, нет? –

+1

'bundle install' предназначен для обеспечения согласованной среды для проекта и будет одновременно выполнять все требования к версии из всех. Именно поэтому лучше всего использовать простую открытую зависимость. Gemfile используется Bundler, поэтому разработчик драгоценных камней может иметь согласованный набор зависимостей для разработки. Это включает в себя решение нескольких версий, установленных в системе, и выбор того, который будет использоваться для вашего проекта. Когда жемчуг * установлен *, процесс установки не использует 'Gemfile' напрямую, он использует данные, встроенные в него' .gemspec'. –

Смежные вопросы