You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sinatra集成Active Record执行rake db:migrate报错:ConnectionNotEstablished

Sinatra + ActiveRecord 迁移报错:ActiveRecord::ConnectionNotEstablished

我正在开发一个Sinatra应用,首次尝试用ActiveRecord做数据库方案,已经创建了数据表,但执行rake db:migrate时出错,查过相关问题没解决,求帮忙。

错误信息

rake aborted!
ActiveRecord::ConnectionNotEstablished: ActiveRecord::ConnectionNotEstablished

Tasks: TOP => db:migrate
(See full trace by running task with --trace)

相关文件内容

Rakefile

require_relative './app/controllers/recipe_controller'
require 'sinatra/activerecord/rake'
task :console do
    Pry.start
end

config/environment.rb

require 'bundler'
require 'bundler/setup'
Bundler.require

ActiveRecord::Base.establish_connection(
  adapter: 'sqlite3',
  database: 'db/development.sqlite'
)

require './app/controllers/recipe_controller'

config.ru

require "sinatra"

require './app/controllers/recipe_controller'

run RecipeController

迁移文件(create_recipes.rb)

class CreateRecipes < ActiveRecord::Migration[7.0]
  def change
    create_table :recipes do |t|
      t.string :name
      t.text :description
      t.boolean :completed

      t.timestamps
  end
end

问题排查与解决

核心原因

Rake任务未加载包含数据库连接配置的config/environment文件,导致执行迁移时ActiveRecord无法初始化数据库连接;同时迁移文件存在语法错误。

修复步骤

  1. 修改Rakefile,加载环境配置
    将Rakefile内容替换为:
# 先加载环境配置,确保数据库连接被初始化
require_relative './config/environment'
require 'sinatra/activerecord/rake'

task :console do
    Pry.start
end

原Rakefile直接加载控制器但未加载环境配置,这是连接失败的关键。

  1. 修复迁移文件语法错误
    迁移文件缺少闭合create_table块的end,修改后:
class CreateRecipes < ActiveRecord::Migration[7.0]
  def change
    create_table :recipes do |t|
      t.string :name
      t.text :description
      t.boolean :completed

      t.timestamps
    end # 补上该end,闭合create_table代码块
  end
end
  1. 确认数据库目录存在
    确保项目根目录下有db文件夹,SQLite需要该目录创建数据库文件,若不存在则执行:
mkdir -p db
  1. 重新执行迁移
    完成以上修改后,运行命令:
rake db:migrate

内容的提问来源于stack exchange,提问作者Adesuyi Fisola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 06:35:18