ActiveRecord :: StatementInvalid(PG :: UndefinedTable:错误:关系“ Wiki”不存在

时间:2018-12-13 00:48:22

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

我不知道从这里去哪里。

Rails 4.2.5,Ruby 2.3.8,Devise,Heroku 7.16.7

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

单击登录或注册链接时出现相同的错误。模式显示了为两个模型创建的表。

我尝试过的事情:

  • 在注释掉devise_for:用户之后,从测试分支进行部署,推送到Heroku,这样迁移将得以运行,随后取消注释devise_for:用户,并将agin推送到Heroku。没有运气。

  • 我尝试过rake db:reset。没有运气。

  • 我在工厂文件中查找了任何一个Rails模型,但没有找到任何引用。

  • RAILS_ENV =测试heroku耙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

真的很感谢您的帮助。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

以下有关您的部署情况的陈述假定一个正常配置的Rails应用程序。

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

  • “ test”:在本地计算机上使用本地数据库运行,在命令行中使用RAILS_ENV = test或由诸如“ rake test”之类的命令隐式设置
  • “开发”:在本地计算机上运行,​​并具有本地数据库(与本地测试数据库分开,如您通过查看database/config.yml所见)
  • “ heroku”:在Heroku的服务器上运行,并在Heroku的服务器上运行数据库

以下是在每个单独的部署中运行迁移的方式:

  • “测试”:RAILS_ENV=test rake db:migrate(配置了Rails的环境变量,然后使用Rails.env从database.yml中选择配置)
  • “开发”:rake db:migrate(“开发”是默认的Rails环境)
  • “ heroku”:heroku run rake db:migrate <----可能是您的解决方案。

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

答案 1 :(得分:0)

您确定

  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控制台来运行迁移。您有时会忘记这样做,而对错误消息head之以鼻:-)