Error when pushing data to Heroku: time zone displacement out of range

六月ゝ 毕业季﹏ 提交于 2019-11-27 08:35:19

Using Ruby 1.9.2-p290 instead of 1.9.3-p0 fixed it for me. According to Roger Braun, this is the reason:

The problem is (I think), that marshalling changed between Ruby 1.9.2 and 1.9.3, so this is not really a taps error. Just use whatever version heroku runs to push and pull databases (Probably 1.9.2).

Downgrading to Ruby 1.9.2 from Ruby 1.9.3 does not sound like an appealing option to me.

Heroku's devcentre page actually suggests using pgbackups addon to managing databases ( https://devcenter.heroku.com/articles/pgbackups) . It may sound like it's only for taking backups of production databases down to your local machine but if you read it carefully, they have a large section which deals with "importing a database". What they suggest is that you upload your database to a publically accessible location and run the suggested command

heroku pgbackups:restore DATABASE 'http://s3.amazonaws.com/.....mydb.dump?authparameters'

So, in effect they provide commands to dump your local database, suggest ways to upload it to a location that heroku's servers can fetch your database dump from (assuming your local development machine is not publically accessible from the internet) and then the above command for it to be uploaded into production environment on heroku.

Just putting this up here, since i think problem has been persisting for a very long time without adequate resolution on the real problem.

I run 1.9.3p125 on Heroku and 1.9.3p125 on my local machine. If I want to db:push I just switch to 1.9.2 while uploading:

rvm use ruby-1.9.2-p290
heroku db:push --app my-app
rvm use ruby-1.9.3-p125

Then once the push is complete, I switch back to 1.9.3.

It didn't work for me either using 1.9.3 or 1.9.2.

As Pablo pointed out the problem has to do with the marshalling of the dates (the marshalling converts the date to 12:00:00+XXXX" despite my date type was 'timestamp without timezone').

Anyway, I worked it around by setting the dates to null, so I could successfully push to Heroku. Very poor solution, though. I hope the bug will get fixed soon.

On my platform of choice (gentoo linux) Ruby 1.9.2 is not available anymore. Anyway a version of ruby 1.8.x can be installed at the same time.

Here is how I worked around the issue:

$ eselect ruby list
Available Ruby profiles:
[1]   ruby18 (with Rubygems)
[2]   ruby19 (with Rubygems) *

$ sudo eselect ruby set 1
Password: 
Successfully switched to profile:
ruby18

Now I had to temporally comment from my project Gemfile all the gems that don't work with ruby 1.8 (for example paperclip)

$ bundle install
& bundle exec heroku db:push

Uncomment from Gemfile what was commented before

$ sudo eselect ruby set 2
Password: 
Successfully switched to profile:
ruby19

Not a clean solution but at least works fine.

Just changing the ruby version has not worked for me. Instead I've narrowed down the issue to the new Heroku Toolbelt.

When using the older heroku gem I'm able to db:push just fine. Until heroku fixes it i've created a new gemset and installed the heroku gem. I just switch to this gemset whenever I need to do a db:push.

Which Heroku stack are you on? If you are on bamboo-ree-1.8.7 the right version to use is 1.8.7. This is a marshalling problem and can be solved by using the same Ruby version on both the server and the client.

Try to use native taps without heroku db:push.

taps server POSTGRES_DATABASE_REMOTE_URL login pass

taps push sqlite://db/development.sqlite3 login:pass@localhost:5000

solved the problem for me

It helped me to solve my problem, very practical https://github.com/ricardochimal/taps/issues/92#issuecomment-11996909

On win7-x64, creating app in heroku's cedar and setting pik (rvm-alternative) to use ruby 1.9.2 worked. In a nutshell, what I did:

  • created a new heroku app in cedar stack (running ruby-1.9.2)

    heroku create -s cedar
    
  • installed pik (rvm-alternative), then followed the post-install instructions

    gem install pik
    
  • installed ruby-1.9.2p290, added <RUBY192_INSTALL_DIR>/bin to $env:PATH

  • installed DevKit to ruby-1.9.2

  • ensured all necessary gems are installed in both ruby versions, 1.9.3 and 1.9.2

    pik gem install <gem-1> <gem-2> ... <gem-n>
    
  • specified db gems for production, development, and test environments in Gemfile

    # Development + Test:
    group :development, :test do
      gem 'pg', :platforms => :mingw
    end
    
    # Heroku:
    group :production do
      gem 'thin'
      gem 'pg'
    end
    
  • removed platform refs to mingw32 in Gemfile.lock after

    bundle install
    
  • added new edits in Gemfile and Gemfile.lock (generated) to repo

    git add .
    git commit -am "rebuilt Gemfile for Heroku"
    git push heroku master
    
  • raked up data models, pushed local data up

    heroku run rake db:migrate
    heroku db:push
    heroku open
    
  • then switched back to ruby-1.9.3

    pik use 193
    

Finally got this to work with help from Dosha's answer here. (And thank you to hernanvicente above for the tip.)

Make sure your version of ruby matches the version running on Heroku. It seems like 1.9.2 is the stablest version for these migrations.

Change your gemfile to have the following (assuming you're using SQLite):

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

This likely still does not resolve your problem because your heroku db:push command is using the Heroku toolbar instead of the older, now-deprecated heroku gem. Unfortunately, we actually want the older gem, but the Heroku Toolbar is being called by heroku. To get around this, you will need to install the heroku gem on your version of ruby 1.9.2 and then access it by its specific filepath.

So, the next steps show how you can get this to work:

Run the following commands into your console:

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

Then run:

rake assets:clean
bundle exec rake assets:precompile

Commit your changes to Github.

Then enter the following into your console:

~/.rvm/gems/ruby-1.9.2-p320/gems/heroku-2.40.0/bin/heroku db:push (Use your own filepath, if it's different from this.)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!