13

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例を見てください。いくつか質問があります。

  1. いつ、どこfinalizeに電話すればよいですか?
  2. アプリを初めて展開するときに、運用dbサーバーにファイルがありません。どのようにすれば自動的に作成されますか? project.dbまたは、ファイルを手動で作成する必要がありますか?
  3. 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

4

1 に答える 1