1

我最近在处理 heroku postgresql 数据库时遇到了一个问题。

我想更新某个用户的属性(让他成为管理员),所以我从 heroku 中提取了数据库以在本地更新他的属性并再次将其推回。

heroku db:pull
UPDATE users SET user_type = 'admin' WHERE name = 'thisuser'; //in postgres
heroku db:push

然后,出现了下面的问题。

!!! Caught Server Exception
HTTP CODE: 500
Taps Server Error: PGError: ERROR:  time zone displacement out of range: "2013-01-21 12:00:00.000000+5895153600"
LINE 1: ....facebook.com/thisuser', 'facebook', '2374538475', '2013-01-2...

所以我再次运行以下命令以从错误中恢复。

heroku db:pull
heroku db:push

这导致从生产和开发中清除我的整个数据库。我有两个问题要问。

  1. 在 Heroku 环境中更新某些用户的属性的正确方法是什么?仅仅为了更新一个小对象的一个​​属性而拉动整个数据库似乎有点太多了。
  2. 为什么我的行为会导致数据库中的所有内容都被清除?

谢谢您的帮助。我很感激。

4

2 回答 2

1

对于您的命令,我建议您在控制台中执行此类小操作:

$ heroku run rails console

您可以像在本地计算机上一样键入一次性命令。

关于不稳定性:显然这是Ruby 1.9.3 上 Heroku的一个错误。在 1.9.2 上,您不会遇到问题。所以如果你使用 rbenv 或 rvm,你可以在执行 heroku 之前切换 rubies。您甚至可能想编写一个小 shell 脚本,例如:

#!/bin/sh
#safe_heroku.sh
HEROKU_CMD=/usr/local/heroku/bin/heroku   # Check which heroku
RBENV_CMD=/usr/bin/rbenv                  # Check which rbenv
SAFE_RUBY_VERION=1.9.2                    # Check rbenv versions 

$RBENV_CMD shell $SAFE_RUBY_VERSION
$HEROKU_CMD "$@"

用法:

$ safe_heroku rake db:push   # Or whatever command you want to run...
于 2013-01-21T03:09:27.980 回答
0

我同意上面的答案,但是我尝试使用 ruby​​ 安全地进行我需要的任何更改,例如为我会做的用户添加角色:

$ heroku run console
user = User.find(1)
Role = Role.find(1)
user.roles << role

或者在你的情况下

user = User.find_by_name('user name')
user.user_type = 'admin'
user.save!

使用经过测试的代码进行更新而不是破解数据库更安全。

于 2013-01-21T13:13:50.453 回答