运行 rake 任务时如何跳过 Rails 初始值设定项的加载?

2024-01-16

我的 Rails 应用程序有一个网站爬虫,它加载爬虫在 Rails 初始化程序中使用的身份验证凭据config/initializers。初始化程序通过调用 SiteLogin 模型中的模型方法来加载身份验证。

当我跑步时rake db:migrate来创建SiteLoginmodel table 它失败,因为初始化程序期望数据库表已经存在。我可以简单地注释掉初始化程序中的代码,运行迁移来创建表,然后取消注释初始化程序代码,而不必担心问题。

问题是,我使用 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

它可能不是更好的解决方案,但您可以检查该表是否存在:

if ActiveRecord::Base.connection.tables.include?('your_table_name')
  # your code goes here
end

但这通常还不够,因为可能存在未决的迁移。

现在,您还可以检查您是否处于 rake 任务中:

if ActiveRecord::Base.connection.tables.include?('your_table_name') and !defined?(::Rake)
  # your code goes here
end

而且启动测试时可能还不够,因为有在 rake 任务中执行,所以你还可以检查 Rails 环境是否为测试(Rails.env.test?).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行 rake 任务时如何跳过 Rails 初始值设定项的加载? 的相关文章

随机推荐

  • 在 C# 中访问 WindowsInstaller.Installer COM 对象

    我找到了一个不错的Powershell功能 https gist github com MyITGuy 153fc0f553d840631269720a56be5136在 GitHub 上 它使用 WindowsInstaller Inst
  • ASP.NET MVC 3 Razor 递归函数

    好的 所以我想显示一个包含列表列表的列表 我无法知道要显示多少层 所以我想这就是我打破旧的递归例程的地方 不过 我在具体如何解决这个问题上遇到了麻烦 这是我到目前为止所拥有的 视图 简化 foreach MyObject item in M
  • HTML 页脚问题

    是否可以创建一个位于网站底部的页脚 div 无论中间有多少信息 目前 我的 div 的位置取决于我的正文中有多少内容 也可以看看 如何让页脚停留在网页的底部 https stackoverflow com questions 42294 h
  • 将一个项目的 Dll 引用引用到另一个项目

    我有 2 个项目 一个是用 VB NET 构建的 另一个是用 C NET 构建的 我想在 C NET 中使用 VB NET 的某些功能 因此我通过从系统浏览 dll 将 VB NET 解决方案的 dll 文件添加到 C NET 中作为参考
  • 如何将邻接矩阵保存为 CSV 文件?

    我在 R 中使用 CSV 文件创建了一个邻接矩阵 如下所示 Gene1 Gene2 Weight A B 1 A C 0 5 B D 0 5 A D 1 这是我的 R 代码 el read csv my csv sep t library
  • 为什么 std::getline 不阻塞?

    我在 Objective C 类中 在 Objective C 文件中 有以下代码 NSString readString string res std getline cin res return NSString stringWithC
  • Android:如何使用 HttpsURLConnection 以编程方式登录网页

    我是 Android 新手 也是 Java 新手 如果我的问题是一个基本命题 那么很抱歉 我必须编写一个 Android 应用程序 在后台登录一个 aspx 网页 从中获取一些数据 然后从该网页注销 并以编程方式完成这一切 基本上 该过程就
  • 使用 datetime.strftime 显示时区偏移中的 : 字符 [重复]

    这个问题在这里已经有答案了 给出的格式字符串是什么strftime这将给出与我看到的相同的输出isoformat gt gt gt from datetime import datetime gt gt gt import pytz gt
  • MVVM - 视图逻辑:视图与视图模型[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 应该 视图逻辑通常驻留在哪里 在视图中 包括后面的代码 还是在视图模型中 从逻辑上讲 我理解用于修改视图 使其动态 更改其元素属性的任何内容 V
  • 解析 JSON C# 错误

    我尝试获取 JSON 数据但出现错误 解析值时遇到意外字符 路径 行 0 位置 0 我正在使用 Net 4 5 和 JSON Net 框架 这是我的代码 WebClient net new WebClient string str awai
  • UIView 和 UITableView,reloadData 奇怪的延迟

    我的视图控制器的重画有些奇怪 视图控制器包含一个 UITableView 和一个微调器 我有一个更新提要函数 由 IBOutlet 触发 带来了spinner在我的视图控制器前面并放置一个doUpdate将函数放入 NSOperationQ
  • IE10 中的 jquery UI Draggable 通过滚动条拖动时出现 bug

    我有一个带有可拖动元素的 div 它在所有浏览器中都工作得很好 除了 IE10 存在一个问题 如果您尝试通过滚动条拖动该元素 它会滚动 直到您松开鼠标 在这种情况下该元素将捕捉到鼠标的当前位置 我已经设置了这个小提琴 http jsfidd
  • 如何在 PHP 中创建新运算符?

    我看到自己在执行以下代码来默认分配 PHP 上的所有类型 variable variable variable default value 我知道 5 3 我可以做到 variable variable default value 我想通过
  • 如何替换python3中的has_key?

    我尝试安装自动自我控制 https github com andreasgrill auto selfcontrol并在执行此命令时卡住 sudo usr bin python auto selfcontrol py 它显示错误 Attri
  • 如何将 Spring Boot 配置元数据文件转换为 HTML

    我确信一定有一种优雅的转身方式Spring Boot配置元数据文件 https docs spring io spring boot docs current reference html configuration metadata ht
  • 编译成功后找不到exe

    使用opencv在microsoft Visual Studio 2008中成功调试人脸检测代码后 找不到可执行文件 没有错误 只有三个警告 但它表明构建已成功 您可以进入项目设置并检查输出文件夹 在那里查找二进制文件 二进制不一定意味着e
  • 重命名 gtsummary、tbl_regression/tbl_stack 中的行

    我正在使用 gtsummary 并使用 tbl regression 和 tbl stack 函数将 11 个不同模型的输出堆叠在一起 我希望了解一个一致自变量的优势比在不同感兴趣的因变量之间如何变化 当我打印 tbl stack 输出时
  • 如何解码令牌并获取 Django 的 djangorestframework-jwt 包的信息

    我已经开始使用 djangorestframework jwt 包而不是 PyJWT 我只是不知道如何解码传入的令牌 我知道有验证令牌方法 我需要知道的是如何解码令牌并返回信息编码 我使用此方法来解码令牌并验证用户 首先我没有使用algor
  • 以编程方式为 DataGrid 创建 WPF DataGridTemplateColumn

    我希望能够根据我的数据源以编程方式创建 DataGridTemplateColumns 例如 如果我的源在特定列中有一个日期 我希望能够利用 Datepicker 控件 我知道这可以在设计时使用 xaml 和 DataGridTemplat
  • 运行 rake 任务时如何跳过 Rails 初始值设定项的加载?

    我的 Rails 应用程序有一个网站爬虫 它加载爬虫在 Rails 初始化程序中使用的身份验证凭据config initializers 初始化程序通过调用 SiteLogin 模型中的模型方法来加载身份验证 当我跑步时rake db mi