2010-11-21 14 views
10

Ho scritto un plugin che richiede una gemma come dipendenza.Rails 3: define plugin gem dependency

Dove devo definire questa dipendenza?

Ho provato a creare un Gemfile in vendor/plugins/my_plugin /, ma bundle install non trova questo file.

risposta

16

Ok. Io ho risolto.

1) Creare una Gemfile in vendor/plugins/my_plugin piace:

# Gemfile 
source "http://rubygems.org" 
gemspec 

2) Creare un file di gemspec . Nella cartella vendor/plugins eseguire questo comando:

bundle gem my_plugin 

(Nota questo comando si chiede sovrascrivere alcuni file Controllare i file prima di rispondere:. Y)

3) Aprire gemspec file 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 come will_paginate requi dipendency rosso di my_plugin)

4) Ora vai nel tuo rotaie app e modificare Gemfile, aggiungere:

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

Il percorso specificato suppone che il plugin è già nella cartella vendor/plugins del vostro app per rotaie. Ovviamente quando si distribuisce app per rails non è più necessario specificare l'argomento : percorso.

5) Ora, in rotaie radice app fare: è installato

bundle install 

E dipendenza di my_plugin (will_paginate in questo caso).

Grazie a Sinetris per l'input iniziale.

+4

Ho un problema simile, ma nel mio caso non è un plugin, è un motore/gemma. Ho fatto come hai detto, il 'bundle install' installa le gemme come dipendenze. Ma sembra che l'applicazione non carichi quelle gemme, o le inizializzi, causando errori di metodi indefiniti ovunque. Il motore di per sé funziona bene. Hai idea di cosa potrebbe mancare? – Tiago

+3

Ho lo stesso problema di Tiago, ma il mio * è * un plug-in. 'bundle install' installa tutte le dipendenze - le vedo in Gemfile.lock - ma non sono caricate da Rails. Cosa manca? – davemyron

+0

Ho dovuto spostare il mio init.rb in rails/init.rb che vengono caricati dopo l'applicazione rails caricata. Inoltre ho avuto problemi ad accedere a 'Rails.root' mentre caricavo il codice lib, risolvendolo spostando un po 'di codice init in rails/init.rb. –

0

Gemfile nella cartella dell'applicazione.

# Bundle the extra gems: 
# gem 'bj' 
# gem 'nokogiri' 
# gem 'sqlite3-ruby', :require => 'sqlite3' 
# gem 'aws-s3', :require => 'aws/s3 
+0

devo specificare gioiello dipendenza per plug-in, non per l'applicazione – Sebtm

2

Creare un Gemfile nel vostro vendor/plugins/my_plugin/come:

# Gemfile 
source "http://rubygems.org" 
gemspec 

gem "your-dependency-gem-name" 

nota la direttiva gemspec.

Dai un'occhiata a Using Bundler with Rubygem gemspecs per ulteriori informazioni.

+0

Ok. Forse sono partito dall'ipotesi errata che il comando 'bundle install' cercasse nella cartella vendor/plugins e risolvesse le dipendenze al momento dello sviluppo del plugin. Se capisco ora, ho bisogno di fare una gemma del mio plugin prima e le sue dipendenze saranno risolte quando il mio plugin verrà installato. Destra? – Sebtm

0

Riferimento per me stesso.Se stai realizzando un plugin che dovrebbe funzionare con Rails come RailTie, utilizza rails plugin my_plugin per creare la gemma invece di bundle gem my_plugin. Ti risparmia (io) un sacco di problemi.

Modifica: Quando hai bisogno che la gemma funzioni come RailTie? Ogni volta che si desidera aggiungere il generatore di righi , rake o aggiungere il proprio codice a un'applicazione Rails (chiamato Rails Engine). /Modifica

$ rails plugin new my_plugin 

quindi si aggiunge dipendenze

Gem::Specification.new do |s| 
    #... 
    s.add_dependency "rails" 
    s.add_runtime_dependency "heroku" 
    s.add_development_dependency "sqlite3" 
end 

per includerlo nella vostra applicazione Rails, utilizzare path: come descritto da @Sebtm

o rilasciarlo per RubyGems.

$ gem build my_plugin.gemspec 
$ gem push my_plugin-0.7.0.gem #replace version number 
#in Gemfile, as always 
gem 'my_plugin' 

oppure taggarlo su github. (Usare la loro interfaccia utente release) e dipendono su di esso utilizzando propria risposta

gem 'my_plugin', github: 'accountname/my_plugin', tag: 'v0.7.0' 
+0

Se è necessario farlo funzionare come RailTie per Rails. Quando lo vuoi? Ogni volta che vuoi aggiungere ** generatore di rails **, ** rake tasks ** o aggiungi il tuo codice a un'app Rails (chiamato * Rails Engine *). Se non ne hai bisogno, non usare il plugin 'rails'. – oma

Problemi correlati