В заголовках будут куки, и для транзитного кеширующего CDN это будет уже совсем другой запрос, он вынужден будет сделать cache-miss и передать запрос уже более «вышестоящему» серверу. Плюс я где-то читал, что размер кук может быть такой большой (на самом деле 4Кб, но это играет роль), что обычный GET запрос разбивается на два или более TCP-пакета.
Еще старые браузеры могли одновременно открывать только ограниченный набор соединений для одного домена/сабдомена, так что таким образом распаралеливали загрузку.
Для многих CDN это поведение можно регулировать, но общепринятой практикой хайлоуда является приминение отдельного сабдомена или даже домена (у Гугла — www.gstatic.com), чтобы снизить шанс попадания в такую ситуацию.
Какой-то глюк в композинге, напрямую обратиться к композеру и перегрузить его нельзя (по крайней мере, я не знаю вариантов). У меня похожие глюки были связаны с Хромом, насколько я монимаю, с реализацией GPU-отрисовки в нем. Но это чисто мои предположения.
Если это гитхаб, то там есть разные ключи. Есть личные ключи, с помощью них можно пушить, а есть ключи в репозитории (deployment keys), они нужны для деплоя и CI. Там установлены права только на чтение соответственно.
Это я уже включил, и это не совсем то. Под диск мерджем я подразумеваю сортировку (ORDER BY, GROUP BY) которая происходит на диске, а не в озу (тот disk merge, который в EXPLAIN ANALYZE).
Ну тогда нужно указать полный путь к исполняемому файлу. bundle show имя джема, для тех кто в Gemfile, и gem which имя джема для остальных. Нужные файлы находятся в каталоге bin/.
От Java? В смысле, почему имея возможность получать деньги за разработку на Ruby, я отказался от Java?) Я уже выше писал, что Java это язык с 90-х, который очень медленно развивается и большого удовольствия от него я не получал.
Любопытно видеть как совсем еще джуны хотят учить C++, даже не представляя какой их ждет ад :)
Python это совсем другая тема. Во-первых ОО-модель питона сильно отличается от Рубишной. И как по мне в не лучшую сторону. Но это холиварный вопрос. Важно другое, Python разрабатывался как изначально процедурный язык с OO поверх этого, с плавным переходом к повсеместному OO в версии 3. Ruby же разрабатывался как функциональный язык с OO поверх этого. Многие не понимаю насколько сильно функциональщина повлияла на Ruby и насколько глубоко она в его философии.
Django с Rails трудно сравнивать. Это далеко не одна и та же весовая категория. Django был ближе к Merb, который потом смерджился с Rails. Flask вообще идеологический клон Рубишного Sinatra. И содержит идеии 2–3-х летней давности. Bleeding edge сейчас Grape.
Насчет коробочности Rails, это полный бред. Самое главное чему учать OO-программистов, это повторное использование кода. Чем чаще ты можешь приминить свой класс, тем ты лучше постиг OO-дзен. Так что мне как-то смешно слышать, что OO-вещь слишком уже следует парадигме :) Никакие assets от контроллера не зависят, JS-библиотеки джемятся для того, чтобы была возможность их кастомизировать и обновлят до последних версий без каких либо трудностей.
Play хороший, на него часто портируют код из Rails проектов, когда упираются в производительность. Но опять же. пока я реализую какую-то фичу на Play, на Rails я уже успею ее оттестить, отспекать, задеплоить на стейджинг, получить код-ревью и задеплоить на прод. Бизнес это ценит.
Scala и Groovy вполне неплохие языки, так сказать модернизация для Java/JVM и поприятнее гораздо. В прошлом — Java/Python, сейчас — Ruby. Это те, которыми я зарабатывал/зарабатываю. Ruby (MRI) довольно тормозная штука, отжирает много памяти, но в разработке приятнее всего. За Ruby огромная экосистема, особенно в сфере web, только Java может в этом соперничать с Ruby.
Свои мелкие проекты я делаю на Clojure/ClojureScript, возлагаю большие надежды на Elixir. Но это все очень нишевые языки. Я вот не смог ни тот, ни другой протолкнуть у себя на работе.
Только вот еще один трабл, если вы передатите nil'ового user'а в метод хелпера avatar_for, то на user.avatar.nil? вызвется исключение, мол NoMethodError: undefined method `avatar' for nil:NilClass. Так что лучше обернуть user.avatar.blank? в try. Вот так: user.try(:avatar).blank?
Лично я так всегда делал.