Принудительная версия Ruby

Я только что обжегся, потому что я использовал find_index в массиве на моем устройстве разработки (OSX с Ruby 1.8.7), а на машине развертывания работает Ruby 1.8.6. (В чем разница между find_index и index? Последний работает на 1.8.7 и 1.8.6)

Это заставило меня задуматься: как лучше всего заставить Rails работать с определенной версией Ruby?

Поскольку это, вероятно, актуально (установите несколько rubys!), Мне нужно знать это для OSX, но было бы полезно знать и для Linux, Windows и Commodore 64.

Позже: Конечно, сейчас я работаю в виртуальном устройстве, но я хотел бы иметь возможность управлять своими версиями Ruby, если это возможно, на моем компьютере.

Примечание: меня не слишком волнует запрет запуска Rails с неправильной версией Ruby. Я больше заинтересован в том, чтобы запустить ПРАВИЛЬНУЮ рубиновую версию. Извините за путаницу.


person Dan Rosenstark    schedule 21.01.2010    source источник
comment
К сожалению, самой высокой версией Ruby, работающей на C64, является Ruby 0.7. Наверное, не стоит его поддерживать.   -  person Benjamin Oakes    schedule 21.01.2010
comment
Не совсем ответ на ваш вопрос, но если вы хотите меньше заботиться о различиях в версии Ruby, которую вы используете, вы можете «требовать бэкпорты».   -  person Marc-André Lafortune    schedule 21.01.2010
comment
@ Marc-Andre Lafortune, все это ответ, который помогает решить проблему в целом. Какая ссылка на это? Я вижу проект на github...   -  person Dan Rosenstark    schedule 21.01.2010
comment
Тогда я опубликовал это как ответ (со ссылкой на github)   -  person Marc-André Lafortune    schedule 21.01.2010


Ответы (4)


Это не приведет к требуемой версии ruby, но вы можете использовать что-то вроде RVM, чтобы легко управлять средой ruby ​​​​на ваших устройствах разработки и производства.

http://rvm.io/

Это позволяет вам легко переключаться и поддерживать несколько версий ruby ​​в вашей системе.

person Jim Jeffers    schedule 21.01.2010
comment
Хорошо, я проверю. Я не управляю производственными коробками, но я хотел бы знать, что возможно. - person Dan Rosenstark; 21.01.2010
comment
Да, по крайней мере, вы можете легко настроить свой локальный компьютер в соответствии с вашим производственным сервером. Кроме того, вам следует подумать о том, чтобы ваш системный администратор обновился до 1.8.7, поскольку с 1.8.6 возникает много проблем с безопасностью / производительностью. - person Jim Jeffers; 21.01.2010

Это грубая сила и невежество, но один подход был бы

raise "Wrong ruby version, please use ruby 1.8.7" unless RUBY_VERSION == "1.8.7"
person Andrew Grimm    schedule 21.01.2010
comment
Ну, это определенно часть вопроса, спасибо за это. Я как бы спрашиваю о другой стороне, как заставить работать правильный рубин. - person Dan Rosenstark; 21.01.2010

Используйте константу RUBY_VERSION в вашем контроллере приложений. Это показывает рендеринг страницы с ошибкой 500. Вы хотели бы настроить новую страницу в своем публичном каталоге с соответствующим сообщением.

before_filter :check_ruby_version

def check_ruby_version если только RUBY_VERSION == "1.8.7" render :file => File.join(Rails.public_path, '500.html'), :status => 500 end end

person Community    schedule 21.01.2010
comment
Разве вы не хотели бы просто поместить это в environment.rb, чтобы приложение не запускалось в первую очередь? - person Dan Rosenstark; 21.01.2010

Другой способ взглянуть на проблему — игнорировать различия в версии Ruby, которую вы используете. Мой гем backports обновляет Ruby 1.8.6 в линейке 1.8.x (включая будущую версию 1.8). .8) и многое из 1.9:

require "backports"

Или вместо этого, для менее смелых из нас, вы можете потребовать только функции 1.8.7:

require "backports/1.8.7"
person Marc-André Lafortune    schedule 21.01.2010