我使用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进行身份验证
答案 0 :(得分:0)
您在本地使用什么数据库?它是Postgres数据库,是否与Heroku上使用的version相同?您在Heroku上使用的是什么版本的Postgres? (你可以找到像
这样的东西heroku pg:info -a appname
...
PG Version: 9.2.6
所以我猜我的假设是你使用的是不同的版本,所以你没有在本地看到这个问题。要么是这样,要么你在Heroku应用程序中有不同的数据,所以你会看到问题在那里显现。
答案 1 :(得分:0)
重新启动heroku dynos为我解决了这个问题