Ruby 从外部.SQL文件执行SQL语句

Ruby 从外部.SQL文件执行SQL语句,ruby,sequel,Ruby,Sequel,我有一个schema.sql文件,其中包含一个sql语句形式的官方数据库结构,例如: CREATE TABLE directory (id INTEGER PRIMARY KEY, base TEXT, index_file TEXT, default_ctype TEXT, cache_ttl INTEGER DEFAULT 0); CREATE TABLE handler (id INTEGER PRIMARY KEY, send_spec TEXT, se

我有一个
schema.sql
文件,其中包含一个sql语句形式的官方数据库结构,例如:

CREATE TABLE directory (id INTEGER PRIMARY KEY,   base TEXT,   index_file TEXT,   default_ctype TEXT,   cache_ttl INTEGER DEFAULT 0);
CREATE TABLE handler (id INTEGER PRIMARY KEY,
    send_spec TEXT, 
    send_ident TEXT,
    recv_spec TEXT,
    recv_ident TEXT,
   raw_payload INTEGER DEFAULT 0,
   protocol TEXT DEFAULT 'json');
我想将这些语句应用于我的数据库,以创建一个兼容的模式。是否有一个干净的方法来实现这一点

清洁在这里的意思是:

  • 纯红宝石/续集
  • 独立于底层数据库引擎
  • 不解析
    .sql
    文件

要么我没有正确理解目标,要么为什么不从文件中读取语句并使用默认的
ActiveRecord
方法执行它们

ActiveRecord::Base.execute File.read('PATH_TO_FILE')
或与
续集一起使用

DB.run File.read('PATH_TO_FILE')

因为我并没有忘记给我的问题贴上标签,我需要一个答案。虽然我在Sequel(
Database#run
)中考虑过使用类似的方法,但我没有感觉到它会乐意接受被换行符截断的语句,所以我特别询问在手动加载之前是否有一种简单的方法。啊,很抱歉。无论如何,
Database#run
对换行符没有问题;另外,如果您不希望换行符出现,您可以
gsub/\n/,''
。好的,很高兴听到您对由完成的换行符处理持肯定态度。然而,为什么您要提出
gsub
,我希望它将所有行连接在一个巨大的非法SQL语句中?我检查了这是
数据库#run
确实可以很好地处理我的
.SQL
文件,尽管有多行语句。我应该有更多的信心。请编辑您的答案,以便我可以接受。请注意,
Sequel::Database#run
未指定在单个字符串中处理多个语句。此时您正在处理未定义的行为,它是否有效取决于底层驱动程序。