Aplikacja Moja szyna zawiera przeszukiwacz stron internetowych, który ładuje dane uwierzytelniające używane przez przeszukiwacz w inicjatorze szyn w wersji config/initializers
. Program inicjujący ładuje uwierzytelnianie, wywołując metodę modelu w modelu SiteLogin.Jak pominąć ładowanie inicjalizatorów Rails podczas uruchamiania zadania rake?
Po uruchomieniu rake db:migrate
w celu utworzenia tabeli modeli SiteLogin
nie działa, ponieważ inicjator oczekuje, że tabela bazy danych już istnieje. Mogę po prostu skomentować kod w moim inicjalizatorze, uruchomić migrację, aby utworzyć tabelę, a następnie odkomentować kod inicjalizatora i nie martw się o problem.
Problem polega na tym, że używam Capistrano do wdrożenia, a to oznaczałoby, że będę musiał najpierw wdrożyć bez kodu inicjalizatora, aby uruchomić migrację, a następnie wdrożyć ponownie za pomocą kodu inicjalizatora. Czy istnieje lepszy sposób robienia tego, czy też moje podejście jest całkowicie błędne w tym przypadku.
Oto niektóre przykładowy kod, aby lepiej wyjaśnić moją sprawę:
# 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