Meine Rails App verfügt über einen Website-Crawler, der die Authentifizierungsinformationen lädt, die der Crawler in einem Rails-Initialisierer in config/initializers
verwendet. Der Initialisierer lädt die Authentifizierung durch Aufrufen einer Modellmethode im SiteLogin-Modell.Wie überspringe ich das Laden von Rails-Initialisierungen beim Ausführen einer Rake-Aufgabe?
Wenn ich rake db:migrate
ausführen, um die SiteLogin
Modelltabelle zu erstellen, schlägt es fehl, da der Initialisierer erwartet, dass die Datenbanktabelle bereits vorhanden ist. Ich kann den Code in meinem Initialisierer einfach auskommentieren, die Migration ausführen, um die Tabelle zu erstellen, dann den Initialisierungscode auskommentieren und mich nicht um das Problem kümmern.
Problem ist, ich verwende Capistrano zur Bereitstellung und das würde bedeuten, dass ich zuerst ohne den Initialisierungscode bereitstellen müsste, um die Migration auszuführen, und dann erneut mit dem Initialisierungscode bereitstellen. Gibt es dafür einen besseren Weg oder ist mein Ansatz in diesem Fall völlig falsch?
Hier einiger Beispielcode ist besser zu meinem Fall zu erklären:
# config/initializers/site_crawler_init.rb
SiteCrawler.setup do |config|
config.hostname = "www.example.com"
end
# model/site_crawler.rb
class SiteCrawler
...
class << self
attr_accessor :configuration
def setup
self.configuration ||= Configuration.new
yield(configuration)
end
end
class Configuration
attr_accessor :hostname, :login_credentials
def initialize
@login_credentials = SiteLogin.admin_user
...
end
end
end