ruby – 在生产服务器上使用DataMapper和Sinatra设置数据库的正确方法是什么?

DataMapper document起,我认为至少有四个功能需要被调用来进行数据库设置:
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为例,我有一些问题:

>哪里和什么时候应该最终被调用?
>首次部署应用程序时,生产服务器上没有数据库文件,如何自动创建?还是手动创建project.db文件?
>自从auto_upgrade!包装在:开发块,它不会在生产服务器上调用.当我添加或删除列时,我应该如何升级数据库?

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

解决方法

哪里和什么时候应该完成?

http://rdoc.info/github/datamapper/dm-core/DataMapper#finalize-class_method

This method should be called after loading all models and plugins.

首次部署应用程序时,如何自动创建?还是手动创建project.db文件?

这取决于您的托管安排,但主要的工作是将迁移运行在Rake任务中,并在应用程序部署时运行它们.如果您使用Sqlite,这将创建数据库(尽管在某些主机上,您不允许更新文件系统).我不认为使用Sqlite来生产数据库是个好主意,但这是你的决定.

自从auto_upgrade!包装在:开发块,我应该如何升级数据库?

使用耙子任务.在每次部署之后,您将运行“db:migrate:up”(或任何您称之为)任务,并运行最新的迁移.您可能会从Padrino’s Rake tasks for DataMapper获得一些想法

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...