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

时间:2014-07-29 21:02:18

标签: ruby-on-rails ruby postgresql sequel

任何人都可以告诉我为什么我会得到一个与Sequel :: Model"相关的数据库。尝试在解耦的rails应用程序中运行规范时出错?我的postgreSQL数据库已经使用Rails创建并播种(称为" quizzy_development")。

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

" environments.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

&#34; spec_helper.rb&#34;:

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

&#34; quizzy.rb&#34;:

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"

&#34; sql_spec.rb&#34;:

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

当我运行&#34; Sequel.connect&#34; irb中的代码看起来像是在工作,但由于某种原因,我在运行规范时无法建立连接。想法?

1 个答案:

答案 0 :(得分:1)

以下是我找到的解决方案:

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行。