ruby – Datamapper在通过thin(sinatra)访问时擦除sqlite db
我正在使用sinatra datamapper构建一个小型Web应用程序.该应用程序基于一个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处理,db_scheme.rb由database.rb加载. 我的db_scheme.rb是gist. 知道为什么datamapper表现得那样吗? PS.我通过从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 如果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... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- flex学习笔记 flex中的一些错误
- 《从零开始学Swift》学习笔记(Day 45)――重写方法
- 浅析PULL解析
- ReactiveCocoa (1) Functional Reactive Programming
- Redhat 6.2 下 oracle 11g R2的安装详解
- ruby-on-rails – 从rails中的url获取控制器和操作信息
- Oracle RMAN备份恢复1-基础篇_超越OCP精通Oracle视频教程培
- objective-c – 应该只从主线程中调用[table reloaddata]吗
- 如何在XML模式中执行互斥属性?
- reactjs – 用React和Webpack删除未使用的css