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无法初始化数据库连接;同时迁移文件存在语法错误。
修复步骤
- 修改Rakefile,加载环境配置
将Rakefile内容替换为:
# 先加载环境配置,确保数据库连接被初始化 require_relative './config/environment' require 'sinatra/activerecord/rake' task :console do Pry.start end
原Rakefile直接加载控制器但未加载环境配置,这是连接失败的关键。
- 修复迁移文件语法错误
迁移文件缺少闭合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
- 确认数据库目录存在
确保项目根目录下有db文件夹,SQLite需要该目录创建数据库文件,若不存在则执行:
mkdir -p db
- 重新执行迁移
完成以上修改后,运行命令:
rake db:migrate
内容的提问来源于stack exchange,提问作者Adesuyi Fisola
相关产品推荐
相关产品推荐

