Ошибка при отправке данных в Heroku: смещение часового пояса вне диапазона - PullRequest
27 голосов
/ 16 ноября 2011

Я запускаю следующую команду, чтобы отправить содержимое моей локальной базы данных в Heroku:

heroku db:push --app my-app

С моего домашнего компьютера это работает безупречно, но с моего рабочего компьютера я получаю эту ошибку:

Ошибка сервера Taps: PGError: ОШИБКА: смещение часового пояса вне диапазона: «2011-11-15 12: 00: 00.000000 + 5894114400»

Я не уверен, откуда взялась эта дата, я нигде не могу найти ее в данных. Есть идеи, что происходит и / или как это исправить?

Ответы [ 11 ]

32 голосов
/ 12 декабря 2011

Исправлено использование Ruby 1.9.2-p290 вместо 1.9.3-p0. По словам Роджера Брауна , это является причиной:

Проблема в том (я думаю), что сортировка изменилась между Ruby 1.9.2 и 1.9.3, так что это не такдействительно ошибка крана.Просто используйте любую версию, которую запускает heroku, чтобы перемещать и извлекать базы данных (вероятно, 1.9.2).

9 голосов
/ 10 июня 2012

Понижение до Ruby 1.9.2 с Ruby 1.9.3 не кажется мне привлекательным вариантом.

На странице devcentre в Heroku на самом деле предлагается использовать дополнение pgbackups для управления базами данных (https://devcenter.heroku.com/articles/pgbackups). Может показаться, что оно предназначено только для создания резервных копий производственных баз данных на локальном компьютере, но если вы внимательно их прочитаете, ониУ меня есть большой раздел, посвященный «импорту базы данных». Они предлагают вам загрузить базу данных в общедоступное место и выполнить предложенную команду

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

Таким образом, в действительности они предоставляют команды для выгрузкив вашей локальной базе данных, предложите способы загрузки ее в место, откуда серверы heroku могут извлечь дамп вашей базы данных (при условии, что ваша локальная машина разработки недоступна для общего доступа из Интернета), а затем приведенная выше команда для его загрузки в рабочую среду на heroku..

Просто изложу это здесь, так как я думаю, что проблема продолжалась очень долго без адекватного решения реальной проблемы.

8 голосов
/ 12 апреля 2012

Я запускаю 1.9.3p125 на Heroku и 1.9.3p125 на моей локальной машине. Если я хочу db:push, я просто переключаюсь на 1.9.2 при загрузке :

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

Затем, когда пуш завершен, я переключаюсь обратно на 1.9.3.

4 голосов
/ 30 апреля 2012

Это не сработало для меня, используя 1.9.3 или 1.9.2.

Как отметил Пабло, проблема связана с сортировкой дат (сортировка преобразовывает дату в 12: 00: 00 + XXXX ", несмотря на то, что мой тип даты был" метка времени без часового пояса ").

Во всяком случае, я обошел все вокруг, установив нулевые даты, чтобы я мог успешно перейти к Heroku. Очень плохое решение, хотя. Я надеюсь, что ошибка будет исправлена ​​в ближайшее время.

2 голосов
/ 09 ноября 2012

Просто изменение версии ruby ​​для меня не сработало.Вместо этого я сузил проблему до нового Heroku Toolbelt.

Когда я использую старую драгоценную герою, я могу использовать db: push просто отличноПока heroku не исправит это, я создал новый gemset и установил гем heroku.Я просто переключаюсь на этот набор, когда мне нужно выполнить команду db: push.

2 голосов
/ 06 сентября 2012

На моей платформе (gentoo linux) Ruby 1.9.2 больше не доступен.В любом случае версия ruby ​​1.8.x может быть установлена ​​одновременно.

Вот как я обошел проблему:

$ 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

Теперь мне пришлось временно комментировать мой проект Gemfile.все драгоценные камни, которые не работают с ruby ​​1.8 (например, скрепка).

1 голос
/ 29 января 2013

Это помогло мне решить мою проблему, очень практично https://github.com/ricardochimal/taps/issues/92#issuecomment-11996909

1 голос
/ 29 декабря 2012

Попробуй использовать родные метчики без heroku db: push.

прослушивает сервер POSTGRES_DATABASE_REMOTE_URL проход для входа

нажатий push sqlite: //db/development.sqlite3 login: pass @ localhost: 5000

решил проблему для меня

1 голос
/ 01 мая 2012

В каком стеке Heroku вы играете? Если вы используете бамбук-ри-1.8.7, то стоит использовать версию 1.8.7. Это проблема сортировки и может быть решена с помощью одной и той же версии Ruby как на сервере, так и на клиенте.

0 голосов
/ 08 августа 2013

Наконец-то все получилось с помощью ответа Доши здесь . (И спасибо hernanvicente выше за подсказку.)

Убедитесь, что ваша версия ruby ​​соответствует версии, запущенной на Heroku. Кажется, 1.9.2 - самая стабильная версия для этих миграций.

Измените свой gemfile, чтобы иметь следующее (при условии, что вы используете SQLite):

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

Это, вероятно, все еще не решает вашу проблему, потому что ваша команда heroku db:push использует панель инструментов Heroku вместо старой, теперь устаревшей самоцветы heroku. К сожалению, нам на самом деле нужен более старый камень, но панель инструментов Heroku вызывается heroku. Чтобы обойти это, вам нужно будет установить гем heroku в вашей версии ruby ​​1.9.2, а затем получить к нему доступ по определенному пути к файлу.

Итак, следующие шаги показывают, как вы можете заставить это работать:

Запустите следующие команды в вашей консоли:

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 (Используйте свой собственный путь к файлу, если он отличается от этого.)

...