2010-08-21 3 views
6

Nach http://edgeapi.rubyonrails.org/classes/Rails/Railtie.html, wenn ich eine Rails 3 Plugin schreiben, und ich möchte in der Initialisierung einzuhaken, schreibe ichInitialisierungsschritt hinzufügen im Server-Modus nur 3 Boot-Prozess Rails

class MyRailtie < Rails::Railtie 
    initializer "my_railtie.configure_rails_initialization" do 
    # some initialization behavior 
    end 
end 

Doch diese initializer erscheint ausgeführt werden, wenn Sie beispielsweise eine Rails rake Aufgabe ausführen, nicht nur, wenn Sie rails s oder ähnliches ausführen. Meine Frage ist, wie verhindere ich, dass mein Code in diesem Block während Rails-Aufgaben ausgeführt wird, im Gegensatz zu vollständigen Rails-Server-Starts? Dies scheint ein häufiges Problem mit Rails 3 Plugins zu sein.

Antwort

0

Zurück, als ich diese Frage gestellt, Mongoid wurde dieses Problem aufgetreten. Ich meldete es here, und es wurde gelöst, indem der Code in einem config.after_initialize Block verpackt wurde. Wenn Rails nicht initialisiert ist, wird dieser Block nie aufgerufen. Weitere Informationen here.

+0

Das funktioniert nicht für mich, egal welchen Code ich in config.after_initialize eintrage wird auch im Konsolenmodus oder Rake-Modus aufgerufen – Alex

+0

Hmm, verwenden Sie den gleichen Stil wie in [Mongoid's railtie.rb] (https: // github. com/mongoid/mongoid/blob/master/lib/mongoid/railtie.rb)? Mit 'config.after_initialize 'verschachtelt innerhalb eines' initializer' Blocks? –

+0

Ich habe die config.after_initialize Block in meine application.rb, aber der Code scheint jedes Mal zu starten, egal ob es von Rails C oder Rails s gestartet ist, oder sogar ein einfacher Rake – Alex

4

diesen Block zu Ihrem initializer hinzufügen:

if defined?(Rails::Server) 
    # do something 
end 

dies mit den aktuellen 3.0.6 Schienen Version funktionieren soll.

+0

Hmm, könnten Sie mehr über die Umstände sagen, unter denen 'Rails :: Server' definiert ist? Ich habe keine Plugins gesehen, die dies verwenden. –

+0

Das ist großartig, aber es scheint nicht mit Heroku zu funktionieren? Irgendwelche Alternativen? – Alex

+0

Ich brauchte etwas in unserer Entwicklungsumgebung, um einige Dienste zu starten, aber nur wenn es im Servermodus ausgeführt wurde, ging es durch den Quellcode der Rails, dieses Objekt wird geladen, wenn Sie den Rails-Server starten. – dudemeister