Error: Relation does not exist when running Rails in production using postgresql
Error: Relation does not exist when running Rails in production using postgresql
我在 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 数据库时,我可以在运行 \dt:
时看到预期的 table
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:
使用 rake db:create:all
从 database.yml
文件创建的 production
数据库是在您的机器上本地创建的,而不是在 heroku 上创建的。
Heroku 自动推断生产环境的数据库配置,并在您 运行 git push heroku master
第一次创建时创建它。
有关 posts
table 不存在的错误消息是因为没有 运行 在 heroku 上迁移。 运行 heroku run rake db:migrate
将迁移应用到 heroku 上的生产数据库。
此外,您的本地环境中不需要 database.yml
的 production
部分。
第一次使用 heroku 时请参考 https://devcenter.heroku.com/articles/getting-started-with-rails4;它内容全面且非常有帮助。
编辑
实际问题是让本地生产数据库正常工作。
解决方案是使用 rake db:migrate RAILS_ENV=production
正确应用迁移
我在 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 数据库时,我可以在运行 \dt:
时看到预期的 table 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:
使用 rake db:create:all
从 database.yml
文件创建的 production
数据库是在您的机器上本地创建的,而不是在 heroku 上创建的。
Heroku 自动推断生产环境的数据库配置,并在您 运行 git push heroku master
第一次创建时创建它。
有关 posts
table 不存在的错误消息是因为没有 运行 在 heroku 上迁移。 运行 heroku run rake db:migrate
将迁移应用到 heroku 上的生产数据库。
此外,您的本地环境中不需要 database.yml
的 production
部分。
第一次使用 heroku 时请参考 https://devcenter.heroku.com/articles/getting-started-with-rails4;它内容全面且非常有帮助。
编辑
实际问题是让本地生产数据库正常工作。
解决方案是使用 rake db:migrate RAILS_ENV=production