rake db:migrate在将ActiveRecord与Sinatra一起使用时不起作用

问题描述 投票:0回答:1

我正在尝试创建一个非常基本的Sinatra应用程序,该应用程序仅使用Active Record和Sqlite3。

为了尽可能完整,我正在按照教程中的说明进行操作,其中依次说明了以下步骤:

  1. 通过在主应用程序文件中放置以下代码来创建数据库:
ActiveRecord::Base.establish_connection(
  :adapter =>'sqlite3',
  :database=>'wiki.db'
)

class User < ActiveRecord::Base
  validates :username, presence: true, uniqueness: true
  validates :password, presence: true
end

  1. 要创建数据库并更改其结构,请创建一个包含以下内容的Rakefile:
require "./wadapp.rb"                                                                                    
require "sinatra/activerecord/rake"
  1. 保存Rake文件并在终端中运行以下命令:
rake db:create_migration NAME=create_users
  1. 将在db/migrate/中创建一个名为timestamp_create_users.rb的新文件。导航到该文件并使用以下内容进行编辑:
class CreateUsers < ActiveRecord::Migration[6.0]                                                         
  def change
    create_table :users do |t| 
      t.string :username
      t.string :password
      t.boolean :edit
      t.timestamps null: false
    end 
    User.create(username: "Admin", password: "admin", edit: true)
  end 
end
  1. 在终端中,运行命令rake db:migrate

这是代码停止工作的最后一点。我没有任何输出来表明已创建:users,并且在应用程序内无法访问任何表。

我已经尝试回滚等,但是没有迹象表明已经创建了表,因此没有回滚或更改吗?我也尝试先运行rake db:create,因为有些帖子建议这样做,但出现以下错误:

(in /Users/jonathonday/ruby/wad/wiki)
rake aborted!
ActiveRecord::AdapterNotSpecified: The `development` database is not configured for the `default_env` environment.

Available databases configurations are:


/Users/jonathonday/.rvm/gems/ruby-2.6.3/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/connection_specification.rb:251:in `resolve_symbol_connection'
/Users/jonathonday/.rvm/gems/ruby-2.6.3/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/connection_specification.rb:219:in `resolve_connection'
/Users/jonathonday/.rvm/gems/ruby-2.6.3/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/connection_specification.rb:140:in `resolve'
/Users/jonathonday/.rvm/gems/ruby-2.6.3/gems/activerecord-6.0.2.1/lib/active_record/connection_handling.rb:187:in `resolve_config_for_connection'
/Users/jonathonday/.rvm/gems/ruby-2.6.3/gems/activerecord-6.0.2.1/lib/active_record/connection_handling.rb:50:in `establish_connection'
/Users/jonathonday/.rvm/gems/ruby-2.6.3/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:187:in `create_current'
/Users/jonathonday/.rvm/gems/ruby-2.6.3/gems/activerecord-6.0.2.1/lib/active_record/railties/databases.rake:39:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

[我也以root用户(sudo su)运行了rake db:migrate命令,但确实得到了另一个错误:

(in /Users/jonathonday/ruby/wad/wiki)
rake aborted!
LoadError: cannot load such file -- sinatra
/Users/jonathonday/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/Users/jonathonday/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'

这是我得到的使用ActiveRecord创建和构建基本数据库的说明,因此,如果缺少任何内容,或者有更好的方法,我将非常乐意听。

ruby activerecord sinatra rake rakefile
1个回答
0
投票

我通过卸载ActiveRecord 6.0.2.1并安装版本5.2.4设法解决了该问题。

这似乎解决了所有问题,当我现在运行rake db:migrate时,我得到了结果:

(in /Users/jonathonday/ruby/wad/wiki)
== 20200209194032 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0008s
== 20200209194032 CreateUsers: migrated (0.0178s) =============================

我不确定为什么会这样,但是我将对此提出一个单独的问题。

© www.soinside.com 2019 - 2024. All rights reserved.