PG Heroku上的Json数据类型。在当地工作。 PG :: InvalidTextRepresentation

时间:2014-05-08 09:08:12

标签: ruby-on-rails json postgresql heroku

我使用omniauth登录用户,然后在数据库中存储一些属性。以下是我如何删除omniauth哈希的空白属性并选择一些属性

  def update_blank_attributes(attributes,force_update_attr)
    attributes.each { |k,v| puts attributes.delete(k) unless (force_update_attr.include?(k)||read_attribute(k).blank?) }
    update_attributes!(attributes)
  end

我的用户模型有一个数据类,它是一个json数据类型:

class AddDataToUsers < ActiveRecord::Migration
  def change
    add_column :users, :data, :json
  end
end

即使在删除和重新创建数据库之后,这在本地也可以正常工作。

但是我在heroku上遇到以下错误:

 ActiveRecord::StatementInvalid (PG::InvalidTextRepresentation: ERROR:  invalid input syntax for type json
 DETAIL:  Token "=" is invalid.
 CONTEXT:  JSON data, line 1: "linkedin_data"=...
: INSERT INTO "users" ("created_at", "data", "email", "name", "provider", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"):
 app/models/user.rb:68:in `update_blank_attributes'
   app/controllers/authentications_controller.rb:38:in `create'
 PG::InvalidTextRepresentation: ERROR:  invalid input syntax for type json
 CONTEXT:  JSON data, line 1: "linkedin_data"=...
DETAIL:  Token "=" is invalid.


local PG version:9.3.3 
Heroku PG version: 9.3.3

我在本地以及heroku中从Linkedin获取/保存相同的数据,因为它完全相同地调用了linkedin进行身份验证

2 个答案:

答案 0 :(得分:0)

您在本地使用什么数据库?它是Postgres数据库,是否与Heroku上使用的version相同?您在Heroku上使用的是什么版本的Postgres? (你可以找到像

这样的东西
heroku pg:info -a appname
...
PG Version:  9.2.6

所以我猜我的假设是你使用的是不同的版本,所以你没有在本地看到这个问题。要么是这样,要么你在Heroku应用程序中有不同的数据,所以你会看到问题在那里显现。

答案 1 :(得分:0)

重新启动heroku dynos为我解决了这个问题