我正在使用ActiveRecord创建Sinatra应用程序以保留数据。当我运行rake db:migrate时,它会自动生成一个schema.rb文件,该文件包含具有force :: cascade的表名。这不会让我保存/保留我的数据。如果我删除此文件,我可以保存/保留数据。但是,每次迁移都会生成此架构文件。我不知道如何阻止这种情况的发生。
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :name
t.string :email
t.string :password_digest
end
end
end
require "./config/environment"
require "./app/models/user"
class UserC < Sinatra::Base
configure do
set :views, "app/views"
enable :sessions
set :session_secret, "password_security"
end
end
require "bundler"
Bundler.require
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => "development.sqlite"
)
require_all 'app'
require_all 'db'
require_relative './config/environment'
use Rack::MethodOverride
#use Rack::Session::Cookie
run UserController
#gemfile # frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
# gem "rails"
gem 'activerecord', :require => 'active_record'
gem 'pry'
gem 'pry-nav'
gem 'bcrypt'
gem 'rake'
gem 'require_all'
gem 'rack_session_access'
gem 'shotgun'
gem 'sinatra'
gem 'sinatra-activerecord', :require => 'sinatra/activerecord'
gem 'sqlite3'
gem 'thin'
gem 'tux'
我将其留给将来的用户使用,这些用户在构建自定义Sinatra ActiveRecord应用程序时遇到令人困惑的错误。
汲取的教训是确切地知道您所有宝石的作用。在我的问题中,错误来自环境文件。添加了require_all“ db”是因为我认为require_all已使我的应用访问指定的文件。从字面上看,require_all将运行该文件。重要的是要注意,此环境文件针对向数据库发出的每个请求都运行。因此,为每个获取请求运行了包含create_table文件的db文件夹。删除require_all'db'后,我的应用程序开始正常运行。