heroku db:push错误:时区位移超出范围

时间:2012-04-10 22:17:10

标签: ruby-on-rails heroku timezone

我做了heroku db:push

起初它很顺利

Sending schema
Schema:        100% |==========================================| Time: 00:00:06
Sending indexes
schema_migrat: 100% |==========================================| Time: 00:00:01
Sending data
3 tables, 8 records
schema_migrat: 100% |==========================================| Time: 00:00:00
users:           0% |                                          | ETA:  --:--:--
Saving session to push_201204102202.dat..

这些是push_201204102202.dat文件的内容:

    {"klass":"Taps::Push","database_url":"sqlite://db/development.sqlite3","remote_url":"http://heroku:osui59a24am79x@taps19.heroku.com","session_uri":"/sessions/7436189125","stream_state":{},"completed_tables":["schema_migrations"],"table_filter":null,"local_tables_info":{"schema_migrations":2,"users":4,"microposts":2}}

然后麻烦开始了:

    !!! Caught Server Exception
    HTTP CODE: 500
    Taps Server Error: PGError: ERROR:  time zone displacement out of range: "2012-04-10 12:00:00.000000+5894467200"



    ["/app/.bundle/gems/ruby/1.9.1/gems/sequel3.20.0/lib/sequel/adapters/postgres.rb:175:in `async_exec'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/seq
uel/adapters/postgres.rb:175:in `block (2 levels) in execute'","/app/.bundle/gems/ruby/1.9.1/gems/sequel-.20.0/lib/sequel/database/logging.rb:28:in`log_yield'","/app/.bundle/gems/ruby/1.9.1/gems/sequel-.20.0/lib/sequel/adapters/postgres.rb:175:in `block in execute'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-.20.0/lib/sequel/adapters/postgres.rb:158:in`check_disconnect_errors'","/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/adapters/postgres.rb:175:in `execute'","/app/.bundle/gems/ruby/1.9.1/gems/sequel-.20.0/lib/sequel/adapters/postgres.rb:240:in `block (2 levels) in execute'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/connection_pool/threaded.rb:71:in`hold'","/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/database/connecting.rb:226:in `synchronize'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/adapters/postgres.rb:240:in `block in execute'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/adapters/postgres.rb:261:in `check_database_errors'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/adapters/postgres.r
b:238:in `execute'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/database/query.rb:71:in `execute_dui'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/dataset/actions.rb:552:in `execute_dui'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/dataset/actions.rb:243:in `block (2 l
evels) in import'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/dataset/actions.rb:243:in `each'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.2
0.0/lib/sequel/dataset/actions.rb:243:in `block in import'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/database/query.rb:223:in `_transaction'
", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/database/query.rb:209:in `block in transaction'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.
0/lib/sequel/connection_pool/threaded.rb:84:in `hold'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/database/connecting.rb:226:in `synchronize'"
, "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/database/query.rb:207:in `transaction'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequ
el/dataset/actions.rb:243:in `import'", "/app/lib/taps/data_stream.rb:315:in `import_rows'", "/app/lib/taps/data_stream.rb:158:in `fetch_remote_in_server'", "/a
pp/lib/taps/server.rb:114:in `block (3 levels) in '", "/app/lib/taps/utils.rb:161:in `call'", "/app/lib/taps/utils.rb:161:in `server_error_handlin
g'", "/app/lib/taps/server.rb:112:in `block (2 levels) in '", "/app/lib/taps/db_session.rb:15:in `block in conn'", "/app/.bundle/gems/ruby/1.9.1/g
ems/sequel-3.20.0/lib/sequel/database/connecting.rb:76:in `connect'", "/app/.bundle/gems/ruby/1.9.1/gems/sequel-3.20.0/lib/sequel/core.rb:119:in `connect'", "/a
pp/lib/taps/db_session.rb:14:in `conn'", "/app/lib/taps/server.rb:111:in `block in '", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/
base.rb:865:in `call'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:865:in `block in route'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-
1.0/lib/sinatra/base.rb:521:in `instance_eval'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:521:in `route_eval'", "/app/.bundle/gems/rub
y/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:500:in `block (2 levels) in route!'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:497:in `ca
tch'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:497:in `block in route!'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/
base.rb:476:in `each'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:476:in `route!'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/
sinatra/base.rb:601:in `dispatch!'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411:in `block in call!'", "/app/.bundle/gems/ruby/1.9.1/
gems/sinatra-1.0/lib/sinatra/base.rb:566:in `instance_eval'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `block in invoke'", "/ap
p/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `catch'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `invok
e'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411:in `call!'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:399:
in `call'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979:in `block in call'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinat
ra/base.rb:1005:in `synchronize'", "/app/.bundle/gems/ruby/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979:in `call'", "/home/heroku_rack/lib/static_assets.rb:9:
in `call'", "/home/heroku_rack/lib/last_access.rb:15:in `call'", "/app/.bundle/gems/ruby/1.9.1/gems/rack-1.2.1/lib/rack/urlmap.rb:47:in `block in call'", "/app/
.bundle/gems/ruby/1.9.1/gems/rack-1.2.1/lib/rack/urlmap.rb:41:in `each'", "/app/.bundle/gems/ruby/1.9.1/gems/rack-1.2.1/lib/rack/urlmap.rb:41:in `call'", "/home
/heroku_rack/lib/date_header.rb:14:in `call'", "/app/.bundle/gems/ruby/1.9.1/gems/rack-1.2.1/lib/rack/builder.rb:77:in `call'", "/app/.bundle/gems/ruby/1.9.1/ge
ms/thin-1.2.7/lib/thin/connection.rb:76:in `block in pre_process'", "/app/.bundle/gems/ruby/1.9.1/gems/thin-1.2.7/lib/thin/connection.rb:74:in `catch'", "/app/.
bundle/gems/ruby/1.9.1/gems/thin-1.2.7/lib/thin/connection.rb:74:in `pre_process'", "/app/.bundle/gems/ruby/1.9.1/gems/thin-1.2.7/lib/thin/connection.rb:57:in `
process'", "/app/.bundle/gems/ruby/1.9.1/gems/thin-1.2.7/lib/thin/connection.rb:42:in `receive_data'", "/app/.bundle/gems/ruby/1.9.1/gems/eventmachine-0.12.10/l
ib/eventmachine.rb:256:in `run_machine'", "/app/.bundle/gems/ruby/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'", "/app/.bundle/gems/ruby/1.9
.1/gems/thin-1.2.7/lib/thin/backends/base.rb:57:in `start'", "/app/.bundle/gems/ruby/1.9.1/gems/thin-1.2.7/lib/thin/server.rb:156:in `start'", "/app/.bundle/gem
s/ruby/1.9.1/gems/thin-1.2.7/lib/thin/controllers/controller.rb:80:in `start'", "/app/.bundle/gems/ruby/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:177:in `run_com
mand'", "/app/.bundle/gems/ruby/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:143:in `run!'", "/app/.bundle/gems/ruby/1.9.1/gems/thin-1.2.7/bin/thin:6:in `'", "/app/.bundle/gems/ruby/1.9.1/bin/thin:19:in `load'", "/app/.bundle/gems/ruby/1.9.1/bin/thin:19:in `'"]

3 个答案:

答案 0 :(得分:7)

这是一个ruby 1.9.3错误。您应该使用带有db:push的1.9.2才能工作。如果你安装了rvm,你可以这样做:

rvm use ruby-1.9.2-p318
heroku db:push

请确保使用正确的1.9.2版本,我将p318作为示例,因为我已将它安装在我的最后。要使用rvm查看已安装的ruby版本,请使用rvm list。如果您没有安装1.9.2,请使用rvm install ruby-1.9.2

答案 1 :(得分:1)

使用Ruby 1.9.2的gemset,安装tap和sqlite3,你会没事的。

sudo gem install heroku --no-ri --no-rdoc

sudo gem install taps --no-ri --no-rdoc

sudo gem install sqlite3 --no-ri --no-rdoc

答案 2 :(得分:0)

最后在Dosha的回答here的帮助下得到了这个。

确保您的ruby版本与Heroku上运行的版本相匹配。似乎1.9.2是这些迁移的最稳定版本。

将您的gemfile更改为具有以下内容(假设您使用的是SQLite):

group :development do
 gem 'taps', :require => false
 gem 'sqlite3'
end

这可能仍然无法解决您的问题,因为您的heroku db:push命令正在使用Heroku工具栏而不是旧的,现已弃用的heroku gem。不幸的是,我们实际上想要更老的宝石,但是heroku正在调用Heroku工具栏。要解决这个问题,您需要在您的ruby 1.9.2版本上安装heroku gem,然后通过其特定的文件路径访问它。

因此,接下来的步骤将展示如何使其发挥作用:

在控制台中运行以下命令:

rvm install ruby-1.9.2-p320
rvm use ruby-1.9.2-p320
bundle install`
sudo gem install heroku --no-ri --no-rdoc

然后运行:

rake assets:clean
bundle exec rake assets:precompile

将您的更改提交给Github。

然后在控制台中输入以下内容:

~/.rvm/gems/ruby-1.9.2-p320/gems/heroku-2.40.0/bin/heroku db:push (使用您自己的文件路径,如果它与此不同。)