我正在尝试编写一个简单的Sinatra Web应用程序,其中包含可以添加或读取的任务列表。现在我开始列表为空。
这是我的代码:
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
方法中的地方,每次加载'/'
页面时它都会运行,我觉得这个页面太多了。
这样做的正确方法是什么?
由于
答案 0 :(得分:1)
我通过将整个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!
希望这有助于将来。