谁能告诉我为什么在解耦的 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/