【发布时间】:2015-05-12 00:55:14
【问题描述】:
我的 Rails 应用程序有一个网站爬虫,它加载爬虫在 config/initializers 的 rails 初始化程序中使用的身份验证凭据。初始化程序通过调用 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
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3