私の Rails アプリには Web サイト クローラーがあり、クローラーが .NET の Rails イニシャライザーで使用する認証資格情報を読み込みますconfig/initializers
。初期化子は、SiteLogin モデルのモデル メソッドを呼び出すことによって認証を読み込みます。
rake db:migrate
モデル テーブルを作成するために実行するSiteLogin
と、初期化子はデータベース テーブルが既に存在することを想定しているため、失敗します。イニシャライザのコードをコメント アウトし、移行を実行してテーブルを作成し、イニシャライザ コードのコメントを解除するだけで問題を心配する必要はありません。
問題は、私は Capistrano を使用して展開しています。これは、移行を実行するために初期化コードなしで最初に展開し、次に初期化コードを使用して再度展開する必要があることを意味します。これを行うためのより良い方法はありますか、それともこの場合の私のアプローチは完全に間違っています。
私のケースをよりよく説明するためのコードサンプルを次に示します。
# 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