【发布时间】:2020-05-24 17:22:03
【问题描述】:
我正在尝试创建一个非常基本的 Sinatra 应用程序,它只使用 Active Record 和 Sqlite3。
为了尽可能完整,我正在按照教程中的说明进行操作,该教程按顺序说明了以下步骤:
- 通过将以下代码放入主应用程序文件中来创建数据库:
ActiveRecord::Base.establish_connection(
:adapter =>'sqlite3',
:database=>'wiki.db'
)
class User < ActiveRecord::Base
validates :username, presence: true, uniqueness: true
validates :password, presence: true
end
- 要创建数据库并更改其结构,请创建一个包含以下内容的 Rakefile:
require "./wadapp.rb"
require "sinatra/activerecord/rake"
- 保存 Rake 文件并在终端中运行以下命令:
rake db:create_migration NAME=create_users
- 将在
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
- 在终端中运行命令
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