Из документа DataMapper, я думаю, что для настройки базы данных необходимо вызвать как минимум четыре функции:
DataMapper.setup(:default, 'sqlite:///path/to/project.db')
DataMapper.finalize
DataMapper.auto_migrate!
DataMapper.auto_upgrade!
Во многих обучающих программах DataMapper + Sinatra я узнал, что auto_migrate!
и auto_upgrade!
не должны вызываться каждый раз, когда приложение загружается на рабочий сервер. Но в то же время многие примеры называют эти функции в основном рубиновом файле приложения sinatra, скажем app.rb
, без дополнительной проверки. И некоторые примеры вообще не называют finalize
. До сих пор я смущен, и я не уверен, что делать на рабочем сервере.
Возьмем, например, следующий простой app.rb
, у меня есть несколько вопросов:
- Где и когда следует вызывать
finalize
? - При первом развертывании приложения на рабочем сервере нет файла
db
, как я могу его автоматически создать? Или мне нужно создать файлproject.db
вручную? - Так как
auto_upgrade!
завернут в блок:development
, он не будет вызываться на рабочем сервере. Как я могу обновить базу данных при добавлении или удалении столбцов в ней?
require 'sinatra'
require 'data_mapper'
configure do
DataMapper.setup :default, "sqlite3://#{Dir.pwd}/project.db"
end
class Book
include DataMapper::Resource
property :id, Serial
property :title, Text
belongs_to :author
end
class Author
include DataMapper::Resource
property :id, Serial
property :name, Text
has n, :books
end
configure :development do
DataMapper.auto_upgrade!
end
get '/:id' do
@author = Author.get params[:id]
erb :list_author_and_his_books # The template has nothing to do with this question, ignore it
end
get '/new' do
# Some code for user to input book or author details
end
get '/create' do
# Some code to create book or author in db
end
Спасибо, что прочитали этот длинный пост: D