【问题标题】:Ruby: translating sqlite commands to postgres commandsRuby:将 sqlite 命令转换为 postgres 命令
【发布时间】:2017-05-14 23:00:32
【问题描述】:

我正在部署到 Heroku,我需要将一些 Ruby 示例代码从 SQLite 转换为 Postgres。

这是原始的 SQLite 代码:

#SQLite table
DB = Sequel.connect('sqlite://gcm-test.db')
DB.create_table? :Device do
  primary_key :reg_id
  String :user_id
  String :reg_token
  String :os, :default => 'android'
end
Device = DB[:Device]  # create the dataset

我已经翻译了建表部分,但不知道最后一行是什么意思。

Device = DB[:Device]  # create the dataset

这是到目前为止翻译后的 postgres 代码的样子:

DB = PG.connect(ENV['DATABASE_URL'])
DB.exec "DROP TABLE IF EXISTS Device"
DB.exec "CREATE TABLE Device(reg_id INTEGER PRIMARY KEY, user_id text, reg_token text, os text DEFAULT 'android')"
Device = DB[:Device]  # create the dataset

当我尝试在 Heroku 上本地运行它时,我收到此错误:

in `<main>': undefined method `[]' for #<PG::Connection:0x007fe7ca7a6610> (NoMethodError)

有谁知道这条线怎么办?

【问题讨论】:

  • Ruby Sequel 应该只为您执行此操作。您是否有理由不只是将 Ruby Sequel 与 Postgres 与 SQLite 一起使用?您可以将“Sequel.connect”与各种 SQL 后端一起使用,而不仅仅是 SQLite。例如DB = Sequel.connect("postgres://localhost/mydb")
  • 好的,谢谢。我认为 PG 数据库正在创建中。只是这一行给出了错误: Device = DB[:Device] # create the dataset
  • 重点是,除了一些基本的 SQL 之外,Sequel 库还做了很多额外的工作。数据集处理非常广泛和动态。您基本上是在用本地 Postgres 客户端库替换 Sequel ORM 库及其所做的一切(并且做了很多工作)。您必须使用自己的代码重新实现 Ruby Sequel 中的所有数据集处理。
  • 你试过用DB = Sequel.connect(ENV['DATABASE_URL'])简单地替换一行吗?
  • 酷,我试过了,它现在正在运行!非常感谢!现在似乎可以创建数据库了。我之前把sequel gem 和sqlite 混淆了,所以我想我需要把它注释掉。无论如何,谢谢!!

标签: ruby-on-rails ruby postgresql sqlite heroku


【解决方案1】:

只需要改成

DB = Sequel.connect(ENV['DATABASE_URL']),

正如乔所说。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2021-07-25
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2018-04-02
    相关资源
    最近更新 更多