Я пытаюсь создать очень простое c приложение 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
был создан и таблица не доступна в приложении.
Я попытался откатить et c, но нет никаких признаков того, что таблица была даже создана, поэтому нет ничего откатить или переделать? Я также попытался сначала запустить 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)
Я также выполнил команду rake db: migrate как пользователь root (sudo su) и получил другая ошибка:
(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'
В этом порядке я получил инструкции по созданию и построению базы данных basi c с ActiveRecord, поэтому, если что-то отсутствует или есть лучший способ, я буду очень рад слушать.