【问题标题】:Strange PostgreSQL errors when trying to start a rails server on Mac OS X尝试在 Mac OS X 上启动 rails 服务器时出现奇怪的 PostgreSQL 错误
【发布时间】:2012-06-29 01:38:40
【问题描述】:

我想让一个 Rails 应用程序与 PostgreSQL 一起工作,但发生了一些奇怪的事情。我的朋友们能够安装 PostgreSQL 并执行:

sudo su
su postgres
createdb development

紧随其后

rails server

没有错误。但是,当我尝试这样做时,我收到了一个奇怪的错误:

/Users/user/.rvm/gems/ruby-1.9.3-p194/gems/activerecord 3.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:1151:in `async_exec': PG::Error: ERROR:  relation "reports" does not exist (ActiveRecord::StatementInvalid) 

LINE 4:              WHERE a.attrelid = '"reports"'::regclass
                                    ^
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
          FROM pg_attribute a LEFT JOIN pg_attrdef d
            ON a.attrelid = d.adrelid AND a.attnum = d.adnum
         WHERE a.attrelid = '"reports"'::regclass
           AND a.attnum > 0 AND NOT a.attisdropped
         ORDER BY a.attnum

请注意,“报告”是应用程序中的模型。

不管怎样,database.yml 文件如下所示:

development:
  adapter: postgresql
  encoding: unicode
  database: development
  pool: 5
  username: postgres
  password: post

(我不知道pool是什么意思,但是我已经把postgres密码设置成了post)

【问题讨论】:

  • 你有任何初始化器可以对你的模型做任何事情吗?
  • 这是什么意思?我不这么认为
  • 听起来您的应用程序初始化中的某些内容正在尝试使用您的 Report 类。该 SQL 是 ActiveRecord 的 PostgreSQL 适配器用来计算表结构的,错误表明您的数据库中没有 reports。当您rake db:migrate 时,您会遇到同样的问题;因此,您的应用程序初始化可能有问题,因为这发生在 之前 db:migrate 做任何有用的事情。你用的是什么插件? config/initializers 有什么东西吗?
  • 感谢您的回答。这是一个有趣的想法。我在配置/初始化程序中有一些东西。我应该查找引用 Report 类的文件吗?
  • 很难说,对报告的引用可能隐藏在搜索后面。我以前见过 ActiveAdmin 涉及到此类问题,但我不使用它,所以这只是胡乱猜测。

标签: ruby-on-rails ruby-on-rails-3 postgresql rails-postgresql


【解决方案1】:

你跑rake db:migrate了吗?

【讨论】:

  • 当我尝试 rake db:migrate -- rake aborted 时,它给了我同样的错误! PG::Error: ERROR: 关系“报告”不存在....等
  • rake db:reset 或 rake db:drop 和 rake db:create 怎么样(警告:如果您有本地数据库中的任何数据,您将丢失任何数据!)
  • rake db:drop 和 rake db:create 似乎什么都不做,因为当我运行“rake db:reset”时,它仍然让我中止了 rake!错误。
  • 尝试在 yml 文件中将数据库命名为其他名称,然后运行 ​​db:create, db:migrate
  • 这似乎也不起作用。我听说如果我手动创建报告表,这可能会解决 - 但你知道我该怎么做吗?
【解决方案2】:

WHERE a.attrelid = '"reports"'::regclass ... 的引号过多。应该是WHERE a.attrelid = 'reports'::regclass ...

【讨论】:

  • 有趣——你知道这应该在哪个文件中吗?我会努力改正的
  • 对不起,我不知道 RoR。可能它以某种方式假设“报告”是一个表名或列名,但在这种情况下它是一个字符串文字。
  • 引号很好,有问题的 SQL 是 ActiveRecord 的 \d reports 版本,但表还没有,所以转换失败。这是应用程序初始化阶段的鸡生蛋问题。
猜你喜欢
  • 2011-12-20
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 2011-10-13
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多