gpt4 book ai didi

ruby - Datamapper 在通过 thin (sinatra) 访问时删除 sqlite 数据库

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:09 24 4
gpt4 key购买 nike

我正在使用 sinatra + datamapper 构建一个小型网络应用程序。该应用程序基于 sqlite 数据库,该数据库在 table1 中包含大量记录,而 table2 中没有任何记录。

我的目录结构如下:

total 32
-rw-r--r-- 1 atma staff 1895 31 Δεκ 21:35 application.rb
drwxr-xr-x 6 atma staff 204 31 Δεκ 21:10 archive/
-rw-r--r--@ 1 atma staff 82 23 Δεκ 23:59 config.ru
drwxr-xr-x 10 atma staff 340 31 Δεκ 21:38 lib/
drwxr-xr-x 4 atma staff 136 27 Δεκ 20:01 public/
drwxr-xr-x 6 atma staff 204 24 Δεκ 00:00 views/
ls -R lib
database.rb db_scheme.rb db_status.yaml fileutils.rb greek-dict.txt greekcase.rb rankmanager.rb wodb_el_v0.0.1.db

数据库位于lib/wodb_el_v0.0.1.db。所有这些文件都包含类。

当我在 rankmanager.rb 或 database.rb 中运行测试时,通过添加以下行来调用类:

Class TestClass
[code goes here]
end
x = TestClass.new
x.test_class_method

当我这样做时,一切都运行良好。当我在我的 application.rb 中删除执行测试(我创建对象并运行方法)和 require_relative 的行时,它会删除数据库使用它。数据库由 db_scheme.rb 处理,它由 database.rb 加载。

我的 db_scheme.rbgist .

知道为什么数据映射器会这样吗?

附言。我通过手动运行 database.rb 创建数据库的方法将数据加载到数据库。

致以最诚挚的问候,感谢您提前抽出时间!

最佳答案

在您的 db_scheme.rb 中,您有:

version = '0.0.1' # database version
db = 'wodb_el_v' + version + '.db' #db location

DataMapper.setup( :default, "sqlite3:///Users/atma/Dropbox/Programming/Projects/Local/HOWDB/lib/#{db}" )

...

if File.exists?(db)
DataMapper.auto_upgrade!
else
DataMapper.auto_migrate! # erases and creates the database. This needs run before any work is done with the database!
end

if File.exists?(db) 行检查文件是否存在当前工作目录,即您启动程序的目录。当您启动 Thin 时,该目录将是父目录,不是 lib 目录,因此不会找到该文件并且 auto_migrate!将运行,清除您的数据。

您应该确保始终处理数据库文件的绝对路径:

version = '0.0.1' # database version
db = File.expand_path('../wodb_el_v#{version}.db', __FILE__)

DataMapper.setup(:default, "sqlite3:///#{db}" )

if File.exists?(db) #db is now the absolute path
# as before...

关于ruby - Datamapper 在通过 thin (sinatra) 访问时删除 sqlite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14105580/

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