【问题标题】:ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "wikis" does not existActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: 关系“wikis”不存在
【发布时间】:2019-05-14 04:13:37
【问题描述】:

我不知道从这里去哪里。

Rails 4.2.5、Ruby 2.3.8、Devise、Heroku 7.16.7

应用程序在本地运行良好,并成功部署到 Heroku。当我访问实时应用程序时,主页会按预期填充,并且可以访问关于页面。我有一个 wikis 索引链接,当我尝试访问它时,我收到下面的 wiki 错误。无需登录即可查看索引页面。

当我点击登录或注册链接时,我遇到了同样的错误。 Schema 显示了为两个模型创建的表。

我尝试过的事情:

  • 在注释掉 devise_for: users 后从测试分支部署,推送到 Heroku 以便迁移运行,随后取消注释 devise_for: users 并将 agin 推送到 Heroku。运气不好。

  • 我试过 rake db:reset。运气不好。

  • 我在工厂文件中查找并没有找到对任一 Rails 模型的任何引用。

  • RAILS_ENV=test heroku rake db:migrate

维基错误

2018-12-13T00:08:10.414883+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "wikis" does not exist
2018-12-13T00:08:10.414885+00:00 app[web.1]: LINE 1: SELECT "wikis".* FROM "wikis"  ORDER BY created_at DESC
2018-12-13T00:08:10.414887+00:00 app[web.1]:                               ^
2018-12-13T00:08:10.414888+00:00 app[web.1]: : SELECT "wikis".* FROM "wikis"  ORDER BY created_at DESC):
2018-12-13T00:08:10.414890+00:00 app[web.1]:   app/policies/wiki_policy.rb:42:in `resolve'
2018-12-13T00:08:10.414892+00:00 app[web.1]:   app/controllers/wikis_controller.rb:26:in `index'
2018-12-13T00:08:10.414893+00:00 app[web.1]: 
2018-12-13T00:08:10.414895+00:00 app[web.1]: 

登录/注册错误

2018-12-13T00:09:49.468548+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "users" does not exist
2018-12-13T00:09:49.468550+00:00 app[web.1]: LINE 5:                WHERE a.attrelid = '"users"'::regclass
2018-12-13T00:09:49.468552+00:00 app[web.1]:                                           ^
2018-12-13T00:09:49.468553+00:00 app[web.1]: :               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
2018-12-13T00:09:49.468555+00:00 app[web.1]:                      pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
2018-12-13T00:09:49.468557+00:00 app[web.1]:                 FROM pg_attribute a LEFT JOIN pg_attrdef d
2018-12-13T00:09:49.468558+00:00 app[web.1]:                   ON a.attrelid = d.adrelid AND a.attnum = d.adnum
2018-12-13T00:09:49.468560+00:00 app[web.1]:                WHERE a.attrelid = '"users"'::regclass
2018-12-13T00:09:49.468561+00:00 app[web.1]:                  AND a.attnum > 0 AND NOT a.attisdropped
2018-12-13T00:09:49.468564+00:00 app[web.1]:                ORDER BY a.attnum
2018-12-13T00:09:49.468565+00:00 app[web.1]: ):

spec/factories/wikis.rb

FactoryGirl.define do
  factory :wiki do
    title "MyString"
    body "MyText"
    private false
    user
  end
end

spec/factories/users.rb

FactoryGirl.define do
  factory :user do
    email 'sample_user@google.com'
    password 'sample_password'
  end
end

非常感谢您对此的帮助。

提前谢谢你!

【问题讨论】:

  • 你能确认迁移在 heroku 上成功运行了吗?

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


【解决方案1】:

以下关于您的部署情况的陈述假设一个正常配置的 rails 应用程序。

您的项目正在处理三个独立的部署,每个部署都有自己的数据库(因此也有自己的数据库迁移状态)。您的三个环境是(标签任意):

  • “test”:在本地计算机上运行,​​使用本地数据库,在命令行中使用 RAILS_ENV=test 或通过“rake test”等命令隐式设置
  • “development”:在您的本地机器上运行,使用本地数据库(独立于您的本地测试数据库,您可以通过查看database/config.yml 看到)
  • “heroku”:在 Heroku 的服务器上运行,数据库在 Heroku 的服务器上

在每个单独的部署中运行迁移的方法如下:

  • "test":RAILS_ENV=test rake db:migrate(环境变量配置Rails,然后Rails.env用来从database.yml中选择配置)
  • “development”:rake db:migrate(“development”是默认的Rails环境)
  • "heroku": heroku run rake db:migrate

我最好的猜测是,您需要运行最后一个命令,以确保迁移(包括名为 CreateWikis 的迁移)已应用于“heroku”部署中的数据库。

【讨论】:

  • 非常感谢大家提供宝贵的意见。每天学习和重新学习。 @Luke Griffiths 你的预感是正确的。执行 heroku run rake db:migrate 完成了这项工作。对于我这种情况的未来读者:运行 heroku config 以确保您的数据库已设置。你应该看到 DATABASE_URL : postgres://……。一旦确认执行上述命令。瞧!
【解决方案2】:

你确定吗

  1. 您在 Heroku 上设置了数据库?
  2. 迁移正在运行?

如果它在本地运行,并且您收到错误 PG::UndefinedTable,这似乎是缺少迁移。

对于 2. 您可以在您的应用根目录中添加 Procfile(无扩展名)并简单地输入:

web: bundle exec puma -p $PORT -e $RAILS_ENV release: bundle exec rails db:migrate

这将在部署时自动运行您的迁移,请参见此处:https://devcenter.heroku.com/articles/release-phase

仅部署到 Heroku 不会自动迁移您的数据库。我不会尝试手动登录 Heroku 控制台来运行迁移。你会在某些时候忘记这样做,并在错误消息上猛烈抨击:-)

【讨论】:

    猜你喜欢
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多