Олег: да, ORM позволяет абстрагироваться. С основными типами данных типа integet, text и тд проблем не должно быть (тем не менее, их описание может отличаться от одной СУБД к другой) - если честно, не знаю почему из документации убрали это описание. Но есть и специфические типы вроде hstore у Postgres, естественно при переходе на MySQL это работать не будет.
aPilot: Python и Ruby - языки общего назначения (т.е. при желании можно написать все что угодно). PHP тоже, но как-то у него за пределами веба все плохо. Мобильные приложения - это отдельная категория, и там из названных вами языков серьезно используется только C++. Естественно скорость работы зависит от производительности языка, но приложение скорее будет тормозить от плохой архитектуры приложения, чем от языка. Скорость разработки зависит от инструментария языка, у Ruby и Python с этим дела обстоят хорошо, но PHP сейчас тоже хорошо развивается в этом плане.
Рекомендую сперва изучить Ruby, прежде чем погружаться с головой в Rails. Иначе многие вполне понятные рубисту вещи будут казаться "магией". Например, вот неплохой список материалов (там есть и книги по rails, и по тестированию, и просто полезные любому разработчику) https://github.com/AwesomeRubyist/awesome_reading_list
Антон Иванов: Не работал с Apache Apollo, так что не могу сравнивать. Относительно dj/resque/sidekiq скажу вкратце - 1й подойдет для самых простых задач, 2й использует redis, что дает прирост в скорости работы), 3й потребляет меньше памяти (как хранилище тоже использует redis) и является самым быстрым из тройки. Вообще в любой ситуации надо выбирать тот инструмент, с которым лучше знаком, ведь это поможет решить задачу эффективнее.
Кирилл Казаков: вы делаете что-то странное. Если вы хотите условную валидацию, то нужно вынести if в параметры метода validates. Если хотите добавить условие в запрос на проверку уникальности, то нужно использовать conditions (так же как параметр validates) - api.rubyonrails.org/classes/ActiveRecord/Validatio...
Gabe Jonson: скорее контейнеры - частный пример классов, т.е. они хранят в себе сами данные и дают вам интерфейс для взаимодействия с ними. То, что классы содержат в себе описание логики, поведения, и делает их отличными от простой структуры. @ - это просто объявление переменной, в которую можно положить что угодно, при этом переменная будет действовать в рамках области видимости текущего объекта (будь то класс или его экземпляр).