Для Mysql у нас есть ограничение. В драйвере Mysql doc мы имеем:
Ниже приведены некоторые известные проблемы и ограничения для MySQL Connector / J: Когда Connector / J извлекает временные метки для перехода на летнее время (DST), используя метод getTimeStamp () в наборе результатов, некоторые из возвращаемых значений могут быть неправильными. Ошибок можно избежать, используя следующие параметры подключения при подключении к базе данных:
blockquote>useTimezone=true useLegacyDatetimeCode=false serverTimezone=UTC
Итак, когда мы не используем эти параметры, и мы вызываем
setTimestamp or getTimestamp
с календарем или без календарь, мы имеем временную метку в часовом поясе jvm.Пример:
Часовой пояс jvm - GMT + 2. В базе данных есть временная метка: 1461100256 = 19/04/16 21: 10: 56,000000000 GMT
Properties props = new Properties(); props.setProperty("user", "root"); props.setProperty("password", ""); props.setProperty("useTimezone", "true"); props.setProperty("useLegacyDatetimeCode", "false"); props.setProperty("serverTimezone", "UTC"); Connection con = DriverManager.getConnection(conString, props); ...... Calendar nowGMT = Calendar.getInstance(TimeZone.getTimeZone("GMT")); Calendar nowGMTPlus4 = Calendar.getInstance(TimeZone.getTimeZone("GMT+4")); ...... rs.getTimestamp("timestampColumn");//Oracle driver convert date to jvm timezone and Mysql convert date to GMT (specified in the parameter) rs.getTimestamp("timestampColumn", nowGMT);//convert date to GMT rs.getTimestamp("timestampColumn", nowGMTPlus4);//convert date to GMT+4 timezone
Первый метод возвращает: 1461100256000 = 19/04/2016 - 21:10 : 56 GMT
Второй метод возвращает: 1461100256000 = 19/04/2016 - 21:10:56 GMT
Третий метод возвращает: 1461085856000 = 19/04/2016 - 17 : 10: 56 GMT
Вместо Oracle, когда мы используем одни и те же вызовы, имеем:
Первый метод возвращает: 1461093056000 = 19/04/2016 - 19:10: 56 GMT
Второй метод возвращает: 1461100256000 = 19/04/2016 - 21:10:56 GMT
Третий метод возвращает: 1461085856000 = 19/04/2016 - 17: 10:56 GMT
Примечание: Нет необходимости указывать параметры для Oracle.
Я нашел здесь недокументированная опция создать новое приложение с помощью более старой версии направляющих.
rails _2.1.0_ new myapp
Можно генерировать скелет с любой версией и потребовать той, которую Вы хотите в config/environment.rb
:
# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.1.2' unless defined? RAILS_GEM_VERSION
или использование команда "направляющих" формирует версию, которую Вы хотите так или иначе.
Необходимо также смотреть на "замораживание" драгоценных камней направляющих в приложение. Это помогает много с развертыванием, особенно в общих средах хостинга.
Просто изменяются RAILS_GEM_VERSION
переменная в config/environment.rb
и выпускают задачу граблей замораживания:
rake rails:freeze:gems