我最近在处理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
这导致整个我的数据库从生产和开发中消失。 我有两个问题要问。
感谢您的帮助。我非常感激。
答案 0 :(得分:1)
对于你的命令,我建议你做这种小事in a console:
$ heroku run rails console
您可以像在本地计算机上一样输入一次性命令。
关于不稳定性:显然在Ruby 1.9.3上使用Heroku是bug。在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...
答案 1 :(得分: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!
更安全地使用经过测试的代码进行更新而不是破解数据库。