Ich habe einen relativ kleinen Initialisierungscode, den ich ausführen möchte, wenn rails server
läuft, aber nicht, wenn ich rails generate
, rails console
oder irgendeinen anderen rails-Befehl ausführen (einschließlich Rake-Aufgaben, die die Umgebungsaufgabe erfordern) . Dieser Codeabschnitt füllt einige Caches vor und ist relativ teuer, daher möchte ich nicht, dass er auf etwas anderem als rails s
Lösungen, die nicht zufriedenstellend sind:
Foremanet al. Das bedeutet, dass es auf einem anderen Prozess ausgeführt wird, der für diesen kleinen Codeabschnitt (a) über dem Anfang steht. (b) erfordert Interprozesskommunikation anstelle des einfachen In-Memory-Ansatzes, der vom Initialisierer bereitgestellt wird.
Auf dem Server habe ich das gelöst, indem ich passagier konfiguriert habe, um eine spezielle Umgebungsvariable in Rails zu übergeben und ihm zu sagen, dass es im Serverkontext läuft. Aber ich würde es gerne, wenn möglich, out of the box auf allen Maschinen des Entwicklers arbeiten, ohne sich daran zu erinnern, Rails Server auf eine Weise zu betreiben, die auch diese Umgebungsvariable (d. H.% Co_de%) bereitstellt.
Diese Frage wurde schon immer in Bezug auf die Ausführung eines Initialisierers gestellt, wenn er in IN_SERVER=true rails server
und nicht in rails server
ausgeführt wird. Ich möchte es jedoch nur bei der Server-Initialisierung ausführen - die Korrektur für Rake ist großartig, aber nicht umfassend.
Können Sie etwas wie das Überschreiben von Rails::Server#initialize
ausführen, so dass es Ihren Initialisierungscode in Ihrem Initialisierer aufruft?
Oder, einfacher gesagt, setzen Sie Ihren Code in script/rails
, da dieser immer ausgeführt wird, wenn Sie rails server
ausführen, können Sie leicht mit ARGV
oder ENV
darin herumspielen.
Tags und Links ruby-on-rails-3 ruby-on-rails ruby-on-rails-3.1