2012-12-03 11 views

risposta

15

non è probabile possibile aggiungere le dipendenze locali, perché gli altri utenti non saranno in grado di accedere al gioiello in quanto dipende locali e, quindi, di alcuna utilità dopo la pubblicazione. Anziché, aggiungi dipendenza remota nel gemspec del tuo plugin.

Steps -

1) Aprire il file gemspec del proprio plug-in vendor/plugins/my_plugin/ e aggiungere prima della fine parola chiave:

s.add_dependency('will_paginate', '~> 3.0.pre2') 

(In questo esempio Ho usato will_paginate dipendenza richiesta di my_plugin)

2) Ora vai nella tua app per rotaie e modifica Gemfile, aggiungi:

gem 'my_plugin', :path=>'vendor/plugins/my_plugin' 

3) Ora, in rotaie radice app fare:

bundle install 

e la dipendenza di my_plugin (will_paginate in questo caso) è installato.

+0

grazie. Quindi, è impossibile aggiungere una gemma scrivere da solo, solo se pubblico questa gemma. In realtà, voglio sovrascrivere parte di un gioi pubblicato e farlo funzionare con il mio plugin. Forse potrei mettere la gemma nella cartella del venditore di my_plugin. –

+0

da dove si otterrà l'impaginazione? – Jwan622

27

Durante lo sviluppo di 2 gemme, gem1 e gem2, richiedendo che gem1 localmente dipende da gem2 è piuttosto utile.

Non puoi farlo nel tuo gemspec, tuttavia, puoi farlo nel tuo gioiello Gemfile!

# Gemfile 
source "https://rubygems.org" 

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

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

E poi nel vostro gemspec, richiedono il vostro gioiello come si farebbe normalmente se quella gemma è stato già pubblicato:

# gem1.gemspec 
spec.add_runtime_dependency "gem2" 

Basta fare attenzione a non accidentalmente spingere che Gemfile cambiamento!

+1

Ho problemi con questo. Se 'gem2' non è installato con il comando gem, ottengo 'require ': impossibile caricare tale file - gem2' quando si fa' require' gem2'' nel codice gem1. – Ninjaxor

+0

Assicurati che il percorso di gem2 nel Gemfile di gem1 sia corretto. Utilizzare un percorso assoluto se necessario. – Ashitaka

+2

Grazie per il messaggio e la risposta. Ne ho preso un'altra e ho dovuto aggiungere 'rake' come dipendenza. – Ninjaxor

1

A volte vuoi incorporare una gemma in un'altra gemma, non importa perché. Puoi fare riferimento a un gempec da un altro per incapsulare completamente una gemma locale.

require "rubygems" 

embedded_gemspec = Gem::Specification::load("path/to/internal.gemspec") 

Gem::Specification.new do |spec| 
    spec.name   = "gem_that_contains_another_gem" 
    # spec.whatever, = whole bunch of other info 

    #      our files    + other gem's files 
    spec.files   = ['file1.rb', 'file2.rb'] + embedded_gemspec.files 

    # our dependencies 
    spec.add_dependency 'nokogiri' 
    # other gem's dependencies 
    embedded_gemspec.runtime_dependencies.each { |d| spec.add_dependency d } 

end 

MODIFICA: sembra funzionare solo localmente. Se si tenta di installare questo gemspec da, ad esempio, un repository git, non saprà dove ottenere embedded_gemspec (anche se le dipendenze di embedded_gemspec vanno bene).

Problemi correlati