任何人都可以告诉我为什么我会得到一个与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中的代码看起来像是在工作,但由于某种原因,我在运行规范时无法建立连接。想法?
答案 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行。