Ruby on rails Heroku推送问题第2部分-Postgresql-PGError关系不存在-Ruby on Rails
好了,我已经解决了关于Postgresql和SQLite之间差异的最后一个问题,看起来Heroku在告诉我还有一个问题。我是ruby和rails的新手,所以很多东西我一开始都无法理解。在这里寻找一个小方向。错误消息和PostsController索引如下所示。我检查了我的routes.rb文件,看起来一切正常,但我可能遗漏了什么。如果你需要,我会发帖的Ruby on rails Heroku推送问题第2部分-Postgresql-PGError关系不存在-Ruby on Rails,ruby-on-rails,ruby,heroku,Ruby On Rails,Ruby,Heroku,好了,我已经解决了关于Postgresql和SQLite之间差异的最后一个问题,看起来Heroku在告诉我还有一个问题。我是ruby和rails的新手,所以很多东西我一开始都无法理解。在这里寻找一个小方向。错误消息和PostsController索引如下所示。我检查了我的routes.rb文件,看起来一切正常,但我可能遗漏了什么。如果你需要,我会发帖的 Processing PostsController#index (for 99.7.50.140 at 2010-04-23 15:19:22
Processing PostsController#index (for 99.7.50.140 at 2010-04-23 15:19:22) [GET]
ActiveRecord::StatementInvalid (PGError: ERROR: relation "tags" does not exist
: 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 = '"tags"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
):
PostsController#索引
这看起来很奇怪:
WHERE a.attrelid = '"tags"'::regclass
单引号分隔字符串文字,因此内部双引号被视为字符串的一部分。因此,它正在寻找一个表名,该表名实际上包含“
字符作为名称的一部分
我不确定Rails管道是如何生成该查询的,所以我没有任何建议来修复它。对不起
但这显然是个问题。:-这个Rails应用程序使用了哪些gem?你在应用程序的根目录中有一个.gems清单文件供heroku自动检测和安装吗?我看到你正在使用will paginate gem。如果你没有将gems添加到.gems文件中,我想这就是问题所在。如果你没有这样做,那么这将是寻求帮助的最佳场所:我刚刚在rails应用程序中发现了此问题的根源,这要感谢Bill Karwin的上述提示: 当我通过在我的开发盒上运行rake db:schema:dump来更新我的数据库模式时,它会用带引号的字符串替换一些(但不是全部)符号 e、 g
add_index :taggings, ["vectors"]
变成
add_index "taggings", ["vectors"]
这不会在我的dev-box上造成任何问题,但是当从头开始创建db时,heroku似乎不能很好地处理这种差异,而不是在db:push上
当我手动切换表格名称符号时,我的应用程序又开始运行了
如果有人能马上知道原因,我很感兴趣……我也有同样的问题。我打赌您的表名必须是“tag”,而不是“tags”
如果您在Postgresql中将表名更改为“tags”,它会起作用。但是为什么呢?我给出了单数模型名,GHOST取复数。要将下面的行添加到您的
/config/environment.rb
:
ActiveRecord::Base.pluralize_table_names = false
从rails 3.0.3升级到rails 3.0.5时,我遇到了一个类似的“PGError:ERROR:relation”…“不存在”问题-看起来数据库名称的复数化算法已经改变了。我过去需要的是复数化:“project\u metadatas”现在被称为“project\u metadata” 对我来说,解决办法是添加一个简单的迁移,将有问题的表重命名为:
class MetadataName < ActiveRecord::Migration
def self.up
rename_table :project_metadatas, :project_metadata
end
def self.down
rename_table :project_metadata, :project_metadatas
end
end
class MetadataName
我也有同样的问题,但只有en test和prod env
rake db:migrate
嗯
嗨
我发现了一些东西
所以我的问题是:
`enter code here`WHERE a.attrelid = '"posts"'::regclass
你们中的一些人是否使用带有初始化器文件的gem-like-rails\u-admin?
因为当我在与此模型相关的初始值设定项文件中注释我的操作时,我的migarion工作:)
所以也许(我不是sur)初始值设定项在rake任务之前,它要求一个模型,但在那里
不是sql表,所以是bug。
无论如何,此操作对我的测试和生产环境有效:)我也遇到了同样的问题,问题是我忘记了使用rake迁移数据库。以下操作使一切正常工作:
bundle exec rake db:migrate
尽管我记得运行迁移,但在一次大推之后我还是遇到了同样的问题。对我来说,解决方案是重新启动:
heroku restart
这不是很让人舒服。我不太理解你提供的链接中的所有内容。我没有一个包含“的表格,因为我甚至不认为这是可能的。希望其他人以前见过。我对ruby、rails和编程都是新手,所以这对我来说很难。通常rails会根据ActiveRecord类名推断表名,但这是可以重写的。也许您在某个地方指定了SQL表名,但意外地包含了它“角色?我正在使用will_paginate、回形针、wysihat引擎。它们在environment.rb文件中都有行。heroku不是在environment.rb文件中自动安装这些东西的吗?哎呀!不会。Heroku不会从environment.rb文件中自动检测。你需要在你的应用程序根目录中有一个特殊的.gems清单文件。创建一个,并在其中添加所有宝石。上述链接中描述了该过程。我想你和heroku的所有问题都解决了为什么这与这个问题有关?其他答案更好地解决了这个问题!你试过“heroku rake db:migrate”吗?@Comptrol“heroku rake db:migrate”帮我搞定了。Cmd行输出表示Cmd已被弃用,应改用“heroku run rake”。那么,这是否意味着每次我通过迁移在本地进行db更改时,在运行“git push heroku master”之后,我必须使用“heroku run rake”进行后续操作?
#config.model Post do
# field :body, :text do
# ckeditor true
# end
#end
bundle exec rake db:migrate
heroku restart