ruby-on-rails - 在分离的 Rails 应用程序中使用 Sequel 访问 postgres 数据库

标签 ruby-on-rails ruby postgresql sequel

谁能告诉我为什么在解耦的 Rails 应用程序中尝试运行规范时出现“没有与 Sequel::Model 关联的数据库”错误?我的 postgreSQL 数据库已经使用 Rails(称为“quizzy_development”)创建和播种。

我的 rails(“web”)应用程序之外有一个“lib”目录,其中包括以下内容:

“环境.rb”:

if ENV['APP_ENV'] == 'development'
  Quizzy.db = Quizzy::SQLDB.new
end

Sequel.connect(:adapter=>'postgres', :host=>'localhost', :database=>'quizzy_development')

“sql.rb”:

require 'sequel'

module Quizzy
  class SQLDB
    class Question < Sequel::Model
    end

    def get_questions
    end

    def self.SQLDB
      @__orm_instance ||= SQLDB.new
    end
  end
end

“spec_helper.rb”:

require 'pry-byebug'
require './quizzy'

“quizzy.rb”:

module Quizzy
  def self.db=(database)
    @__db_instance = database
  end
end

require_relative "./db/sql.rb"
require_relative "./entities/question.rb"
require_relative "./entities/score.rb"
require_relative "./config/environments.rb"

“sql_spec.rb”:

require 'spec_helper'

describe Quizzy::SQLDB do
  let(:db) { Quizzy::SQLDB.new }

  it "adds a question" do
  end

  it "gets all questions for a quiz" do
    questions = db.get_questions
  end

end

当我在 irb 中运行“Sequel.connect”代码时,它看起来可以正常工作,但由于某种原因,我在运行规范时无法建立连接。想法?

最佳答案

这是我找到的解决方案:

Sequel 要求您在运行方法之前创建一个连接,但如果不使用则关闭数据库连接。基本上,只要你想调用一个方法,就需要建立连接。这导致了一些循环逻辑,因为我试图调用一个可以(我认为)建立连接的方法,但由于未建立连接,我无法调用该方法。

因此,一种解决方案是创建一个新文件“config.rb”,在其中建立连接:

module Quizzy
  def self.SequelConnection
    @sequel_instance ||= Sequel.connect(:adapter=>'postgres', :host=>'localhost', :database=>'quizzy_development')
  end
  Quizzy.SequelConnection
end

然后修改“sql.rb”文件以需要配置文件并实例化连接:

require 'sequel'
require_relative "./config.rb"
module Quizzy
  class SQLDB
    def initialize
      @db = Quizzy.SequelConnection
    end

    class Question < Sequel::Model
    end

    def self.SQLDB
      @__orm_instance ||= SQLDB.new
    end
  end
end

我还从“environments.rb”中删除了 Sequel.connect 行。

关于ruby-on-rails - 在分离的 Rails 应用程序中使用 Sequel 访问 postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024938/

相关文章:

数据库模式 : What's the standard way for manually sorting a table?

ruby-on-rails - find_or_create_by - 不更新

ruby-on-rails - Rails 迁移问题 : disk image is malformed?

ruby-on-rails - 一些 bootstrap-sass (v2.0.3) 变量的自定义值不起作用

ruby-on-rails - 在 Ruby on Rails 上导入 csv 文件

ruby - 转换为utf8和从utf8转换时如何打包和解包猜测字符编码?

ruby-on-rails - Mimetype-fu 不起作用

ruby-on-rails - 为什么 Rubygems 无法安装 Rails?

sql - 使用嵌套 JSON 数组上的过滤器进行选择

postgresql - 在 Cloudformation 模板中创建 Postgres RDS 时出现问题