我的Rails应用程序有一个网站爬虫,它在Rails的初始化器
当我运行rake db:migrate以创建SiteLogin模型表时,它会失败,因为初始化器期望数据库表已经存在。我可以简单地在我的初始化器中注释掉代码,运行迁移以创建表,然后取消注释初始化器代码并不担心这个问题。
问题是,我正在使用Capistrano进行部署,这意味着我必须先在没有初始化器代码的情况下部署以运行迁移,然后再次部署具有初始化器代码。是否有更好的方法来解决这个问题或者我的方法在这种情况下完全错误?
以下是一些代码示例,以更好地解释我的情况:
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