【问题标题】:What do I need to do to DataMapper to have a persistent sqlite database?我需要对 DataMapper 做什么才能拥有一个持久的 sqlite 数据库?
【发布时间】:2011-06-11 21:41:08
【问题描述】:

这是我用来创建数据库的内容:

DataMapper.setup(:default,"sqlite://my.db")

   class Model1

      property :some_prop,String
      ...
      property :other_prop,String
   end

   DataMapper.auto_upgrade!

我将它与 Sinatra 结合使用。脚本运行时一切正常,我可以正常使用我的对象。但是,我在磁盘上看不到文件my.db,并且每次我重新启动应用程序时,我都是从头开始,没有任何对象。

我做错了什么?

【问题讨论】:

  • 您是否找到过这些 URI 的规范?我的(和你的一样)有一个相对路径,但它不起作用。我不知道这些 URI 叫什么。它们是一般的 sqlite 事物,还是特定的 datamapper-sqlite 事物?

标签: ruby sqlite orm sinatra datamapper


【解决方案1】:

尝试将完整路径放在那里(注意有 3 个正斜杠):

DataMapper.setup(:default, "sqlite:///path/to/my/database/my.db")

那么你应该在/path/to/my/database/下看到my.db

【讨论】:

  • 这在 Linux 系统上运行良好。这如何适用于 Windows 解决方案?或者如何在路径上指定我要使用当前目录?
  • DataMapper.setup(:default, "sqlite3://#{File.expand_path(File.dirname(__FILE__))}/db.sqlite") 应该可以解决问题。
  • 或者干脆File.expand_path(relative_path)
  • "#{File.expand_path(File.dirname(__FILE__))}/#{relative_path}"File.expand_path(relative_path)的区别:第一个会解析相对于当前*.rb文件的路径,后者会解析相对于当前工作目录的路径( pwd)
【解决方案2】:
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/my.db")
# your schema

DataMapper.finalize
DataMapper.auto_upgrade!

另见docs.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2010-12-31
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    相关资源
    最近更新 更多