2010-11-21 6 views

Antwort

16

Ok. Ich habe gelöst.

1) erstellen Gemfile in vendor/plugins/mag my_plugin:

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

2) erstellen gemspec Datei. Im Ordner Verkäufer/plugins folgenden Befehl ausführen:

bundle gem my_plugin 

(Hinweis: Dieser Befehl Sie bitten, für einige Dateien überschreiben Überprüfen Sie die Dateien vor der Antwort. Y)

3) öffnen gemspec Datei in vendor/plugins/my_plugin/und fügen Sie vor dem Schlüsselwort end:

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

(in diesem Beispiel habe ich will_paginate verwendet, wie requi rot dipendency von my_plugin)

4) Jetzt in Ihrem Rails-Anwendung gehen und bearbeiten Gemfile hinzufügen:

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

Der Pfad soll festgelegt, dass Ihr Plugin ist bereits in vendor/plugins Ordner Ihrer Schienen App. Natürlich bei der Bereitstellung von Schienen App brauchen Sie nicht mehr zu spezifizieren : Pfad Argument.

5) Jetzt in Rails-Anwendung root tun:

bundle install 

Und Abhängigkeit von my_plugin (will_paginate in diesem Fall) installiert ist.

Vielen Dank an Sinetris für die erste Eingabe.

+4

Ich habe ein ähnliches Problem, aber in meinem Fall ist es kein Plugin, es ist ein Motor/Juwel. Ich habe getan wie du gesagt hast, das 'bundle install' installiert die Edelsteine ​​als Abhängigkeiten. Aber es scheint, dass die Anwendung diese Edelsteine ​​nicht lädt oder initialisiert, was überall Fehler von undefinierten Methoden verursacht. Der Motor an sich funktioniert in Ordnung. Hast du eine Idee, was fehlt? – Tiago

+3

Ich habe das gleiche Problem wie Tiago, aber meine * ist * ein Plugin. 'bundle install' installiert alle Abhängigkeiten - ich sehe sie in Gemfile.lock - aber sie werden nicht von Rails geladen. Was fehlt? – davemyron

+0

Ich musste meine init.rb zu rails/init.rb verschieben, die nach der geladenen Rails-Anwendung geladen werden. Ich hatte auch Probleme beim Zugriff auf 'Rails.root' beim Laden des lib-Codes, löste es, indem ich einen Init-Code nach rails/init.rb bewegte. –

0

Gemfile im Anwendungsordner.

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

Ich brauche gem Abhängigkeit für Plugin angeben, nicht für die Anwendung – Sebtm

2

erstellen Gemfile in Ihrem Anbieter/plugins/my_plugin/wie:

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

gem "your-dependency-gem-name" 

Anmerkung der gemspec Richtlinie.

Weitere Informationen finden Sie unter Using Bundler with Rubygem gemspecs.

+0

Ok. Ich habe vielleicht von der irrigen Annahme ausgegangen, dass der Befehl 'bundle install' in Ordner Vendor/Plugins sucht und die Abhängigkeiten zur Entwicklungszeit des Plugins auflöst. Wenn ich jetzt verstehe, muss ich zuerst ein Juwel von meinem Plugin erstellen und dessen Abhängigkeiten werden aufgelöst, wenn mein Plugin installiert wird. Recht? – Sebtm

0

Referenz für mich.Wenn Sie ein Plugin erstellen, das mit Rails als RailTie funktionieren soll, verwenden Sie rails plugin my_plugin, um den Edelstein anstelle von bundle gem my_plugin zu erstellen. Es erspart Ihnen (mir) eine Menge Ärger.

Edit: Wann brauchen Sie den Edelstein, um als RailTie zu arbeiten? Wann immer Sie möchten Schienen Generator, Rake Aufgaben hinzufügen oder fügen Sie Ihren Code zu einer Rails App (Called Rails Engine). /bearbeiten

$ rails plugin new my_plugin 

dann fügen Sie Abhängigkeiten

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

es in Ihrer Rails-Anwendung zu schließen, verwenden path: wie @Sebtm beschrieben

oder es rubygems lösen.

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

oder auf Github markieren. (Verwenden, um ihre Freilassung UI) und hängen von ihm mit

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

Wenn Sie es brauchen, um als RailTie for Rails zu arbeiten. Wann willst du das? Wann immer Sie ** Rails Generator **, ** Rake Tasks ** hinzufügen oder Ihren Code einer Rails App hinzufügen möchten (Called * Rails Engine *). Wenn Sie nichts davon benötigen, verwenden Sie nicht das 'rails plugin'. – oma