错误:使用postgresql在生产环境中运行Rails时不存在关系

时间:2015-01-08 01:14:56

标签: ruby-on-rails postgresql ruby-on-rails-4 postgresql-9.2

我的Heroku上的应用程序出现问题,并且为了确定它是否特定于我的生产环境或特定于Heroku本身,我在我的机器上使用rails s -e在本地运行我的生产环境生产

当我尝试加载帖子索引时,出现以下错误:

PG::UndefinedTable: ERROR:  relation "posts" does not exist
LINE 1: SELECT "posts".* FROM "posts"
                          ^
: SELECT "posts".* FROM "posts"
PG::UndefinedTable: ERROR:  relation "posts" does not exist
LINE 1: SELECT "posts".* FROM "posts"

奇怪的是,我的帖子索引在Heroku以及开发和测试中都能正常工作。当我运行bundle exec rake db:create:all我得到以下输出:

project_development already exists
project_test already exists
project_production already exists

我的架构如下:

create_table "posts", force: true do |t|
  t.string   "title"
  t.text     "body"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.integer  "author_id"
  t.boolean  "published"
end

当我在命令行中启动rails db时,我可以在运行\ dt时看到预期的表:

 public | posts             | table | Thomas

然而,当我使用ENV = production启动它并运行\ dt时,我得到以下内容:

Schema |       Name        | Type  | Owner  
--------+-------------------+-------+--------
public | schema_migrations | table | Thomas

我尝试过运行ENV = production rake db:schema:load,但这并没有解决问题。

供参考,这是我的database.yaml:

development:
  adapter: postgresql
  encoding: utf8
  database: project_development
  pool: 5
  username:
  password:

test:
  adapter: postgresql
  encoding: utf8
  database: project_test
  pool: 5
  username:
  password:

production:
  adapter: postgresql
  encoding: utf8
  database: project_production
  pool: 5
  username:
  password:

1 个答案:

答案 0 :(得分:2)

production文件database.yml创建的rake db:create:all数据库是在您的计算机上本地创建的,而不是在heroku上创建的。

Heroku会自动推断生产环境的数据库配置,并在您第一次运行git push heroku master时创建它。

关于posts表不存在的错误消息是因为没有在heroku上运行迁移。运行heroku run rake db:migrate以将迁移应用于heroku上的生产数据库。

此外,您不需要在当地环境中拥有production的{​​{1}}部分。

第一次使用heroku时,请参考https://devcenter.heroku.com/articles/getting-started-with-rails4;它是全面的,非常有帮助。

修改

实际问题是让本地生产数据库工作。

解决方案是使用database.yml

正确应用迁移