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.
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.
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.
Gemfile nella cartella dell'applicazione.
# Bundle the extra gems:
# gem 'bj'
# gem 'nokogiri'
# gem 'sqlite3-ruby', :require => 'sqlite3'
# gem 'aws-s3', :require => 'aws/s3
devo specificare gioiello dipendenza per plug-in, non per l'applicazione – Sebtm
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.
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
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'
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
di Sebtm è abbastanza buona, ma ancora non ha funzionato come Tiago e orangechicken descritto. Ho dovuto aggiungere
require 'your-dependency-gem-name'
in cima lib/my_plugin.rb
destra prima che il motore di my_plugin
viene caricato.
Vedi http://guides.rubyonrails.org/engines.html#other-gem-dependencies
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
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
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. –