gpt4 book ai didi

ruby - 如何使用 Sinatra 和 DataMapper 迁移数据库?

转载 作者:搜寻专家 更新时间:2023-10-30 23:45:38 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Sinatra 网络应用程序,其中包含一个可以添加或读取的任务列表。现在我从空列表开始。

这是我的代码:

require 'sinatra'
require 'slim'
require 'data_mapper'


module TaskerApp
class App < Sinatra::Base
configure do
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/development.db")
DataMapper.finalize
DataMapper.auto_migrate!
DataMapper.auto_upgrade!
end

get '/' do
@tasks = Task.all
slim :index
end
end

class Task
include DataMapper::Resource
property :id, Serial
property :owner, String, :required => true
property :time, DateTime
end
end

如果我使用 rackup config.ru 像这样运行它然后转到 '\' 我会得到一个错误,即数据库不存在。要正确创建数据库,我必须在程序中运行一次代码 Task.auto_migrate!。我的问题是,如果我将它放在 configure do 中,它将在调用 class Task 之前运行,并且会失败,但之后我唯一可以把它放在get '/' do 方法,它会在每次加载 '/' 页面时运行,我认为这太多了。

这样做的正确方法是什么?

谢谢

最佳答案

我通过将整个 Task 类放在 model.rb 文件中并在主文件顶部添加 require './model.rb' 来解决它。 model.rb 看起来像这样:

require 'rubygems'
require 'data_mapper'
require 'dm-sqlite-adapter'
require 'bcrypt'

DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/development.db")

class Task
include DataMapper::Resource
property :id, Serial
property :owner, String, :required => true
property :time, DateTime
end

DataMapper.finalize
DataMapper.auto_migrate!
DataMapper.auto_upgrade!
Task.auto_migrate!

希望这对将来的人有所帮助。

关于ruby - 如何使用 Sinatra 和 DataMapper 迁移数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29024534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com