DataMapper ドキュメントから、データベースをセットアップするには、少なくとも 4 つの関数を呼び出す必要があると思います。
DataMapper.setup(:default, 'sqlite:///path/to/project.db')
DataMapper.finalize
DataMapper.auto_migrate!
DataMapper.auto_upgrade!
多くの DataMapper+Sinatra チュートリアルで、アプリが本番サーバーにロードされるたびに呼び出されることは想定されていないことauto_migrate!
を学びました。しかし、その間、多くの例では、追加のチェックなしauto_upgrade!
で、sinatra アプリのメインの ruby ファイル (たとえば ) でこれらの関数を呼び出しています。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