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

前端之家收集整理的这篇文章主要介绍了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获得一些想法

猜你在找的Ruby相关文章