24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
1. C чего мне начать, чтобы стать рубистом? Отличным началом будет Programming Ruby (The Pragmatic Programmers Guide), читать Eloquent Ruby и The Well Grounded Rubyist после прочтения первой толку особо не даст, одни и теже вещи, дальше читаем Ruby Way, затем познаем метапрограммирование с Metaprogramming Ruby. А дальше открываем Ruby cookbook 2015 года, Пишем свой код во время чтения.
2. Какой gem посмотреть, чтобы понять, как писать код? Лучше всего посмотреть небольшие gem'ы вроде cancancan, pundit, camping. А еще можешь полистать на гитхабе гемы с нарастающей популярностю. https://github.com/trending?l=ruby Там еще нет тысяч строк, и тебе будет легче понять.
3. Есть ли GUI для руби? Да. Есть обвязки к Qt, GTK, wxWidgets, Shoes, fxruby (одобренный).
4. Можно ли писать на руби мобильное ПО? Да. Для iOS есть RubyMotion терпимого качества, для Android - лагающий и падающий, но всеми силами развивающийся ruboto. Для WinPhone до сих пор ничего не завезли.
7. Хорошие практики по руби и рельсам? Читаем Rails AntiPatterns, смотрим Rails Best Practices, также неплохо посмотреть Rails Recipes. Почитайте еще Grimm A. - Objects on Rails Еще продвинутое чтиво - http://tutorials.jumpstartlab.com/
13. Где можно задать глупые и не очень вопросы? - здесь - stackoverflow.com - тематические slack-конфы - а вообще, гугли, с вероятностью в 90% ответ на твой вопрос уже висит на stackoverflow.
14. Как фокнуть\сделать фичу\исправить баг, сложно ли это? Нет, не сложно. На rubyflow появляется много новостей с реализацией новой библиотеки, вы можете сделать тесты, фичу для него, старые либы также обрастают багами, улучшайте их! пишите код.
15. В чём писать код? Atom, Brackets, Sublime Text, TextMate, Vim, GNU Emacs. Для особо упоротых энтерпрайз-макак есть rubymine, плагины к эклипс и нетбинс.
16. Можно ли писать на руби с под windows? Можно, но придется обрасти костылями в виде виртуальной машины, придется сходу разбираться с Vagrant и многим другим. Чем дальше ты продвигаешься, тем ближе становится ясно, что пора перекатываться на linux/mac
17. Руби язык одного фреймворка? Есть еще Sinatra, Hanami (ранее Lotus), Volt, Grape, отличные штуки для DevOps - Chef, Puppet и годные генераторы для бложиков - Jekyll, Middleman, всё это активно используется в продакшене
18. Можно ли делать игры на Ruby? Можно, но не нужно. Гем Gosu.
20. Как и где искать работу? Легко и просто - http://rubyjobs.ru/ Не так просто - https://upwork.com/ Еще вконтакте есть группы по руби/рельсам, там иногда постят вакансии. Еще в русской гугл группе постят вакансии. Новичку будет сложно, но возможно.
TODO лист для ньюфагов: И так, ты поставил руби, уже сгенерировал свой первый проект rails new pidaras Начни уже с платинового пути, блог >> клон твиттера >> своя имейджборда >> свой гем >> дальше сам придумаешь. Рекомендации: 1. Для блога, создать роли, Админ, Пользователь (можно использовать паттерн form object). Прикрутить лайки, комментарии. 2. По твиттеру, следуя гайду Хартла, пиши все то что он предлагает в качестве доп. заданий, например оповещение по нику (@eblan: привет) 3. По имиджборде: воссоздать по возможности полный функционал, в этом случае придется ознакомится с javascript/jquery/coffeescript, но тебе так или иначе придется. Еще хорошей фичей будет использование background job и крон тасков (sidekiq, whenever), чтобы заполнять свою борду тредами и постами с другой борды, можно использовать api двача, чтобы вытягивать треды и посты - https://github.com/ID25/api_2ch 4. Не стесняемся постить свои репозитории, наши эксперты с радостью отревьювят вас.
Прочитал? Теперь рефактори то, что уже написал. И не забывай покрывать тестами.
Хорошим финалом будет деплой, это пожалуй самое болезненное, и ничего общего с деплоем на heroku, где тыц тыц и готово. Придется поковыряться со смежными вещами и узнать много нового, уже устоявшийся гем для таких дел - Capistrano.
Не забывайте спрашивать у анонасов вопросы, код лучше показывать через gist или pastebin с подсветочкой. Ну, а мы открываем очередной Ruby Thread.
[code] "руби".capitalize => "руби" "ruby".capitalize => "Ruby" [/code] Почему такую очевидной функциональности нету в стандартной библиотеке? В пистоне и джс изкоробки.
Мне сегодня нужно было написать обработчик на какие-то урлы с русскими символами для хттп-парти.
Взял стандартный URI.encode. Отправляю запрос, а оттуда хуй вместо ответа. Начал разбираться.
Выяснилось: стандартный кодировщик вот уже (как минимум) три года не такой rfc-compliant как хотелось бы, многие uri обрабатывает неточно, а я со своей проблемой не один такой. Там же советовали гем "addressable". Поменял, и, действительно, запросы и ответы стали такими как и должны были быть.
Подскажите как сделать лучше: есть бот для стороннего веб-сайта который работает как фоновая задача (rabbitmq+sneakers), он должен выполнять разного вида задания. В вики написано что для каждого типа задания надо создать отдельного воркера. Проблема в том что для работы боту надо залогиниться на сайте (получить куки, в будущем возможно установить постоянное соединение), как мне передать куки разным воркерам.
>>861239 Т.е. например мне надо запустить 10 ботов — сначала отправляем запрос к серверу, он логинится, получает куки и для каждой задачи создаётся по воркеру с уже установленными куками, и так 10 раз.
Дошёл до "mysql_install_db" и получил первый пик. Пробую "mysqld --initialize" и получаю второй пик. На стаковерфлоу советуют удалить либо сам каталок /var/lib/mysql, либо содержимое этого каталога. Удалял содержимое каталога и пробовал снова "mysqld --initialize", в результате чего команда выполнялась без ошибок и я получал заполненный каталог /var/lib/mysql. После чего снова пробую "mysql_install_db" и получаю ошибку с первого пика. Сносил MySQL и пробовал заново. Все похожие решения на стаковерфлоу испробовал. Почему я даун такой? Почему не получается? Помогите, пожалуйста.
>>859241 Элексирчик такой, вот какой) Пока некоторые вкатываются в реакт и прочую жс поебень, прошаренные поцаны щупают феникс, который по удобности, красоте кода такой же как руби, только лучше.
>>862578 На руби пока есть места, даже новые проекты продолжают писаться (хотя и на пыхе они выходят). Я к тому, что это руби 2.0 в скором времени будет, все к тому и идет.
>>862688 Это значит что они слоупоки и еще толком не решили как надо добавить много важных абсолютно новых фич при этом оставив совместимость с предыдущими версиями. Зато 2.4 в декабре и +5% к производительности прямо как у интела https://youtu.be/8aHmArEq4y0
За 23 года появилось дошли до 2 мажорной версии, если считать что цикл разработки близится к концу, то можешь посчитать сколько осталось.
Это не сильно плохо или хорошо, вообще насрать какая сейчас версия. Вот то что язык развиваится, и фичи типа гильдии (см. видосик ниже) в разработке, радует, да.
Да и компилятор который умеет в минимальный статический анализ, штука
Впрочем, зацикливатся на руби не стоит, в любом случае. учи эликсир хаскель.
Аноны я вообще правильно делаю? https://ideone.com/M5pVTo Суть в том чтобы метод класса возвращал массив уже инициализированных объектов другого подкласса Просто класс в классе смотрится странно (я ньюфаг)
Ты нарушаешь основной принцип solid: каждый класс отвечает только за свою работу. Лучше так не делать, смешение логики превращает код в кашу. Очень невкусную кашу.
Теперь Api может работать с любым классом, что имеет публичные конструкторы, а не только с posts. А классы ничего не знают друг о друге.
Еще, мне не понятно зачем нужна переменная post. задачу можно решить без нее, через анонимные функции (замыкания) (раз уж ты захотел поиграться с каллбеками):
при этом обрати внимание, каждый вызов метода fetch_threads будет приводить к созданию новых объектов.
И, наконец ответ: лучше не писать классы в классах. На это должны быть веские причины. И даже если они есть, ты, скорее всего, делаешь что-то, что потом придется переписывать.
>>863367 Как ни странно, можно без xcode. Когда будешь устанавливать brew, то тебе предложил прямо из терминала запустить команду, которая только компилятор от xcode вытащит, а не всю программу из AppStore.
>>863620 Вот ты говоришь что надо их разделить но дело в том что у меня в классе SomeApi есть метод который используется и в Post, (конкретно он генерирует часть урла для запросов, что-то вроде токена) и используется только в этих двух классах и пользователю он и не нужен (т.е. вроде и нету причины делать его публичным) но и вызвать его кроме как через instance.send :meth я не могу.
если ты хочешь нарушить инкапсуляцию объекта, то можно использовать в инстансе класса Post метод instance_eval для инстанса SomeApi. Инкапсуляцию пробьешь, но это считается плохой техникой.
Альтернатива — рефакторинг SomeApi и Post, с выносом логики которая отвечает за все что связано с токенами в отдельный класс, и может быть даже в отдельный неймспейс, чтобы оградить внутренности от взгяда пользователей.
Посоветуйте книжку по руби для тех, кто шарит, без воды (нет, не хочу читать документацию, хочу красивую пдфку). Желательно написанную критически настроенным автором, с описанием всяких подводных камней, узких мест, спорных решений и бест практисов.
А, ну и какой-нибудь хороший код небольшого объема на почитать посоветуйте, если кто-то шарит.
например, тебе наверняка будет интересно узнать какие методы есть в библиотеках, что расширяют базовые классы (чтобы потом не придумывать свои велосипеды). это библиотека facets:
>>864928 Меня очень настораживает тот факт, что ты даешь русские названия книг - это вроде бы дает повод усомниться в твоей компетентности. С другой стороны - логично же прочитать книжку от Матца, раз уж он ее написал! Спасибо, ее и полистаю для начала.
Что это вообще такое, в руби что нету нормальной http билиотеки ? Использовал раньше http.rb, но в один момент он вдруг отказался возвращать внятный ответ, а дело в том что он со сжатием работать вообще не умеет. Ну я такой, ладно ведь дохуя же библиотек разных должно быть. Захожу на ruby-toolbox, 1 в списке гем rest-client: не может сам автоматом распарсить json по заголовку content-type, окей 2 гем faraday: изкоробки не работает с куками, нахожу middleware faraday-cookie_jar - с куками он то теперь работает, но я получить значение этих кук не могу. Дальше идет multipart-post вообще не отдельная библиотека а расширение стандартного net/http
А есть какие-нибудь гемы чтобы в сложные жсон парсинге можно было ориентироваться, или сразу нужные ключи выдергивать, просто у меня пикрилейтед, и это еще не конец.
Антуаны, а как/куда вы деплоите rails приложения? Внятных инструкций кроме как для хипстерского хероку я не нашёл, а хочется чего-нибудь бесплатного и относительно простого. Может, посоветуете чего-нибудь? Спасибо.
Ребят, помогите фронтенд мартышке понять РБД в разрезе рельс. Вот пример с рецептами и ингридиентами. Суть токова, что у рецепта может быть много ингридиентов с доп полем - количество. У пользователя тоже может быть много ингридиентов с количеством. Ну и рецетов много может быть, но на картинке не указано. Не слишком дичь я нарисовал тут, так и должно быть или хуйня какая-то?
>>868687 Зачем тебе хранить к-во ингредиентов в базе? Ты можешь просто написать recipe.ingredients.count а чтобы это выполнялось без дополнительных sql запросов, делай как тебе посоветовали тут >>868712
>>868840 Я кстати попытался тестировать вручную operation'ы jsonapi-resources, вместо того чтобы гонять целый стек, но чет не вышло. заебло сурцы это гема читать
>>868845 Очевидно, не пользоваться ссаным jsonapi-resources, это не гем, а какая-то инвалидная параша для неумеющих в архитектуру. И вообще сам по себе стандарт JSON API мало профитов в себе несёт и кучу уродского гемора - больше похож на корявую имитацию graphql. Можно использовать, если у тебя целый зоопарк разных девайсов пользуется api( чтобы не приходилось всем вручную обрабатывать ответы), и по каким-то причинам невозможно заюзать graphql. А так других доводов в его пользу по сравнению с ad-hoc API я еще не видел.
>>868764 >>868712 Так, это. Каунт != количество, не? Я конечно не сильно шарю, но по-моему таким образом я смогу узнать только size ингридиентов. Типа >recipe.ingredients.count >3 А мне надо иметь количество каждого ингридиента, как-то: Сыр - 100 ед., Залупа - 5 ед., Корокодил - 0.5 ед. Ну как в рецепте. Т.е. есть таблица в которой перечислены всевозможные ингридиенты. И, например, пользователь может создавать рецепты, делая выборку из существующих ингридиентов, присваивая каждому количество. Я почитал райлсгайдсы и пришёл к выводу, что тут нужна мени-ту-мени связка. Но если между двумя моделями Recipe -> QuantityIngredients <- Ingredients всё в принципе понятно. Джоин таблица держит айди рецепта и айди ингридиента и заодно его квантити. Но если мне понадобится сюда прикрутить UserIngredients? А потом и UserRecipes, начинается казаться что получиться какая-то каша лютая из ассоциаций. Посему и советов мудрых прошу.
>>869019 А вот я сразу понял, что ты имеешь в виду, в отличие от тех анонов! Лол.
Если честно, я бы не стал ебаться с джойнами, тут смысла в этом нет для таких данных, как мне кажется. Просто засунь в рецепт одно жсон-поле "ингредиенты" вида айди->количество. Или юзай монго, например.
Вообще, у тебя что, игра какая-то? Потому что если не игра, а действительно сайт с рецептами от юзеров, то АСТАНАВИТЕСЬ и ПОДУМОЙ - ты правда думаешь, что кто-то будет указывать точное количество крокодилов и сахарного песка, а потом еще и искать рецепты ровно с двумя крокодилами? Ето же оверинжиниринг как он есть.
А если ты это в качестве упражнения, то да: айди рецепта, айди ингредиента, квантити. Айди юзера, айди ингредиента, квантити. Под юзерРесипис ты что имел в виду? Просто у рецепта добавляешь поле "автор", "оунер" или что там у тебя. Если много авторов у каждого рецепта - то да, еще одну таблицу, аналогичную тем, с ингредиентами.
Посоны, говноэникейщик в треде! Готов тратить на программирование 25 часов в сутки, 8 дней в неделю! азаза, нет конечно
В сущности я хотет вкотиться в вэб. хтмл и цсс знаю более-менее. Но хочу уметь в динамические сайты. Посему на данном этапе должен выбрать между PHP/RUBY/жабаскрипт из знаний в программировании - забытый с института паскаль. Вот пришел к вам за советами мудрыми - стоит ли мне начать мои мучения с Ruby? Или таки пиздовать в ПХП-тред? Вообще в Руби сложно вкотиться?
>>869044 П.С. Тащемта я хотет себе что то типа хобби. Хочется мне изучить полезный язык программирования. есть "русские" книги для начинающих? Потому как в спец. литру на английском я боюсь не влезу.
>>869037 Спасибо тебе за понимание, анон. Я сам-то обычно монгу и пользую, как-то так сложилось что в джс среде это первый выбор. Но хочется расширить горизонты. >АСТАНАВИТЕСЬ и ПОДУМОЙ Я в качестве РБД упражнения да, но что такого в точных кол-вах ингредиентов в рецептах? У меня на телефоне приложуха есть, я туда ввожу список хуйни из холодильника, а она мне выдаёт что я могу сварганить из этого. По-моему удобно. >Просто у рецепта добавляешь поле "автор", "оунер" или что там у тебя Да, это будет верным шагом, потому как рецепта без овнера быть не может в принципе, т.к. создавать рецепт может только авторизированный пользователь.
Меня больше всего, что смущает: это получается, что у ингредиента будет, например, четыре ассоциации. [CODE] has_many :recipe_ingredients has_many :recipes, through: :recipe_ingredients
has_many :user_ingridients has_many :users, through: :user_ingridients [/CODE] Это в порядке вещей? Ну и ещё интересно как работать будет сериализация, вот скажет Рецепт модель.
[CODE] class Recipe < ApplicationRecord has_many :recipe_ingredients has_many :ingredients, through: :recipe_ingredients end [/CODE] Если я буду эту модель сериализировать через, скажем, актив модел сериалайзер, то по первой ассоциации (has_many :recipe_ingredients) я получу то, что и должен получить: вложенный жсон аррей из { recipe_id, ingredient_id, quantity }. А вместо ingredient_id мне нужно будет подставлять реальный ингредиент, т.е. ещё один запрос в базу делать?
Хмм, поясните за assets pipeline. Вот при скаффолдинге он создает файлы типа <model_name>.js. В чем профит писать код в этих файлах, кроме, хм, разделения? Ведь все равно он сливает все в один файл и грузит все сразу в продакшене?
Допустим, у меня есть редковызываемый модал в модели users, в котором есть много js событий. Если я напишу этот код в "users.js", то лишний раз нагружу канал, все будут грузить полный application.js (а он еще по-умолчанию блочит рендеринг). Логичнее ли зделать подгрузку скрипта непосредственно при клике на модал? Вот как лучше? inline код вроде бы не rails-style.
Пользуясь случаем, /r/ гайдов по оптимизации asset'ов, самое узкое место в app у меня.
>>869053 Ну просто если в рецепте написано "четыре яйца", то можно сделать то же самое с тремя или двумя яйцами. Непонятно, нахуй это надо тогда - я ж не повар, мне не порцию ровно в двести граммов надо, мнетпожрать надо. Короче, лично я не вижу в этом смысла, вот. Но может это джаст ми, да и оффтоп, так что ладно.
>>869169 >GraphQL ещё малопопулярен Зато эффективен. Ad-hoc быстрее бы получился и опыт бы появился как вообще API делать "по-обычному". А это ведро с гайками не гнётся вообще никак, только круды на нем клепать. Если REST обычно в этом винят, то он хотя бы не налагает на тебя каких-то архитектурных обязательств в отличие от.
>>869207 Ну, моя работа и есть ебашить круды... Я бы не смог убедить заказчика взять graphql, потому что так модно и молодежно, ему нужно быстрее, и проверенное решение.
Короче, вот есть статус у сущности (draft, published, archive). Статус выражает некоторое свойство. На него может быть завязана небольшая логика (типа нельзя комментировать в статью в архиве) или валидация.
А есть состояние, которое выглядит на первый взгляд так же как статус (new, in_progress, executed, completed, rejected). Но в отличии от статуса с состоянием связаны процессы, которые производят много действий, могут меняют этот и другие объекты. Процессы могут быть необратимые ака нельзя повернуть время вспять, особенно если связаны с внешними системами.
Вопрос - как правильно работать с состояниями? Тут нужно объяснить, а в чем собственно проблема. И объяснить мне сложно. Но кто сталкивался, тот я думаю поймет. Во-первых, валидации. Логично что объект должен валидировать свое состояние. Но процесс связанный с переходом намного шире зоны ответственности объекта и ему тоже нужно заниматься валидацией. Во-вторых, действия при переходе. Они намного шире зоны ответственности объекта. Даже не заморачиваясь по поводу лучших практик, декомпозиции и слабого связывания, начиная пихать всю логику в модель, обнаруживаешь что это воняет. В-третьих, процесс как-бы стоит над объектом, оперирует самим объектом. То есть с точки зрения объекта есть переход из A в B. А с точки зрения процесса мы из А можем перейти в B,C,D,E. И после перехода объекта сам процесс при этом еще может быть не завершен и даже откачен назад, если так решит процесс.
Вроде как для этого существуют стейт-машины. Но те гемы что есть, они эти проблемы не рашают или решают частично. Максимум что дает стейт машина это валидацию переходов виде методов can?(). Гуарды раздувают модель, обработчики (собственно процессы) не могут вместиться в реальный процесс потому что не разбирают когда нужно фактически сменить атрибут, когда сделать валидацию, когда открыть и закрыть транзакцию - они как-бы внутри объекта. В общем стейт-машины не дают паттерна работы с состояниями, а только дают валидацию.
Не знаю, получилось ли у меня описать проблему. Я сейчас использую ServiceObjects для самих процессов и простенькие валидаторы переходов в моделях. И в модуль вынесен небольшой функционал для трекинга истории переходов. Но все-таки получается как-то коряво. Есть ощущение, что это делается не так. Прошу совета гуру паттернов проектирования.
>>869446 Короче, я не гуру, но мне тоже интересно, так что напишу свои мысли, по абзацам.
Зачем ты про статус вообще говорил, если у тебя вопрос про состояния?
Объект не должен валидировать свое состояние, он его должен молча хранить. Отдели данные от логики же.
Стейт-машина конечно нужна, но по-моему совсем необязательно тащить либы для этого в код. Тебе просто нужно нарисовать в любом редакторе эту самую стейт-машину со всеми переходами и ичпользовать ее как документацию\спецификацию.
Не очень понятно, в чем именно у тебя проблема, потому что сложности тут должны возникнуть с асинхронностью, хранением истории и откатами, ненадежностью внешних сервисов и обработкой ошибок... а ты спрашиваешь, пихать валидацию в данные или нет. То есть непонятно, какая у тебя в целом структура кода. По-моему ключевым решением тут было бы, например, хранение данных в иммутабельных объектах, чтобы нахаляву получить историю и откат, ну и что-то эвент бейзед с каналами, чтобы не было коллбэк хэлл. А сверху приправить монатками чтобы грациозно ловить фейлы от внешних сервисов ладно шучу
>>860724 (OP) Привет ребята! Я психолог кун, вкатываюсь в жс и заодно хочу написать о связи популярных языков (петон, раби, жиес) с нетрадиционной сексуальной ориентацией. Есть готовые поделиться своим опытом разработки?
Допустим есть паблик метод, который вызывает приватный get(args) request(args, method: :get) #приватный end Как запретить вызов get(1,2, method: :post) ? Или я придумываю себе проблему на пустом месте и можно просто в доках написать какие параметры можно передавать в метод get и не париться ?
Как бля засетапить нормально реакт-редукс хуюкс на рельсах? Примеров в нете нету, только пустой репозиторий на гите с каунтер аппом. Я даже не могу сделать чтобы js.erb говно работало.
Как вкатитьсяя джуном в ДС2, если вакансий нет ? Знаю rails 5, devise/bcrypt, rspec/capybara, знаю bootstap 3, jquery (Ui тоже), scss. Скоро буду изучать либо реакт, либо ангулар (склоняюсь к последнему). На мида не потяну - инфа сотка, но вот что джунить смогу, уверен. Так как вкатиться? Аноны, поделитесь исторями успеха, а то в дизморали нахожусь.
>>870070 Бля еще читать, у меня уже вкладок 15 схоронено с документацией. Конечно когда-то дойду до них, но сейчас мне бы хоть разобраться, пилить фронт нужно полностью на реакте, или только компоненты с ебанутой логикой? А то я попытался запилить примитивный хедер в котором одни кнопки у юзера и другие у гостя и соснул. Хедер это вообще компонент или контейнер?
Анонас а есть такой плагин для атома который будет предлагать автокомплит на основании rdoc/yard документации, и чтобы это работало для всех гемов а не только для файлов проекта?
>>870254 Да бля Вопрос офк не в программач, но я не ебу как Передаю я допустим в компонент обьект юзера. Это просто джейсонина с данными из модели Если мне нужно в компоненте чекнуть значения каких-то методов модели, передавать их отдельно? Ну это хуита, вот другое, пытаюсь ебануть js.erb чтобы хоть урлы забрать из аппа, инстантли сыпется и говорит browserify error import or export can be included only within sourcetype module. И в гугле нихуя по этому поводу нету
>>870019 Никак, блядь. Пайплайн хуй говно остой пидорский, последний раз пользовал 4.2.6 и надеялся что в пятые рельсы наконец-таки подвезут фронтенд суппорт нормальный, но хуй там. Вчера весь вечер и пол ночи сидел ебался с этими обоссаными гемами, такая ересь ебаная. Сегодня утром сел, уебал нахуй с вертухи весь assets/javascripts, создал отдельную папку, поставил туда всю человеческую инфраструктуру, настроил вебпак с аутпутом в assets для прекомпайла, организовал себе через хелперы хотрелоад, и написал на реактоне с редаксом весь UI за пол дня. В рельсавьюшке осталось в итоге: [CODE] <% if user_signed_in? %> <main id="app"></main> <% else %> <%= yield %> <-- devise login page <% end %> [/CODE] Все данные через актив модел сериалайзеры гоняю, этот джбилдер по-моему какая-то помойка. Остался конечно вопрос с менеджментом сессии в приложении, но это дело житейское. Думаю просто поллить рельсы раз в n-секунд на акшен вовзращающий стейт авторизации и на клиенте соответствующим образом реагировать.
>>870319 Ну дык Я же говорю Есть обычный фронт на аштиемеле Там я вывожу Х если у юзера одно говно или У если другое Чтобы ебануть эту же проверку в реакте, нужно датой в компонент передавать результат этой проверки, так? А что если в разных кейсах я передаю от 0 до кастомного числа таких проверок?
>>870340 Ты дичь какую-то несешь. Передавай на клиент своего юзера жсоном, и там уже, на клиенте, делай с этим жсоном какие хочешь проверки. Если у тебя проверки только на сервере могут быть сделаны, то шли запрос на сервер, жди ответа, обнновляй состояние. Я вообще не понимаю, в чем у тебя проблема. У меня такое чувство, что ты хочешь руби-код с сервера на клиенте исполнять, или я не ебу, что еще.
>>870387 Не, нихуя Самое элементарное, у юзера есть метод xuesos? Который пляшет не от поля в модели, а от какой-то другой хуиты. Когда я передаю юзера в компонент, и хочу заодно в компоненте чекнуть xuesos? ли он, тогда нужно ретурн велью xuesos? передавать отдельно, так? Предположу что так, тогда смотрим дальше Если юзера вообще нет, я хочу рисовать две строки Если есть, три, а если есть и хуесос то четыре Мне в пропс нужно передавать всегда все эти значения ("типа" если юзер есть, то это user: user, xuesos: user.xuesos?) а если нет, то чтобы на клиенте это чекнуть все равно нужно передать и то и то в пропс, но пустое. Так? Сорри если хуево обьяснил
>>870406 > Нихуя > Хуесос > Хуеты > Хуево Блядь, чувак, тебя в детстве батя выебал, или что? Ебаный стыд же, господи иисусе!
Ты передаешь компоненту все, что ему надо для рендеринга, а уж откуда и как - это твое дело. Ну или я нихрена не понял, что ты спрашиваешь, пусть тебе кто-нибудь еще посоветует, короче, я не врубаюсь, сори.
Еее, я разобрался со структурой. Следующий вопрос, должна быть возможность писать js.erb файлы с реактом или нет? Пушта у меня это не работает, а в теории должно, сначала же рельсы делают из ерб обычный жс, а уже тогда этот жс компилится в browserify, нет?
>>870635 По ходу нет. Окей. Придумал следующий гениальный костыль. Написать хелпер типа link_helper.js который возвращает хеш внутри которого хеши по скоупам, внутри которых пары ключ - урла. После чего инклюдить этот хелпер в компонентах и юзать урлы оттуда. Очевидно что для этого я ембеддед руби тоже не заюзаю, значит надо как-то генерить его из роутов. Я чекнул пару результатов по generate asset rails и generate file rails но там не то. Эни айдиас? Или это вообще не нужно?
>>870686 Где же они? Чет я нихуя не нашел кроме каунтер аппа, аппа для учета расходов и говночата, и все 2-3 летней давности, а самое примитивное вообще не обьясняется
>>871586 Ну, я хз как можно вкатиться в рельсы, не зная html. Ты тупо не поймешь о чем идёт речь. Потрать недельку на втыкание в htmlbook и написание бложика.
Почему вот так не работает: bets = Bet.joins(:nested_bets) bets = bets.where('nested_bets_count > 10')
а вот так работает: bets = Bet.order("#{sort_column} #{sort_direction}") bets = bets.where('nested_bets_count > 0') bets = bets.where(game: a_game_filter)
я знаю что joins как-то по-другому работает, но я не понимаю как сделать так чтобы я мог делать то что я хочу. Почему я не могу после joins еще делать query всякие? :(
Когда вообще надо использовать символы как ключи в хеше? Т.е. например синтаксис для создания symbol: key намного приятнее но когда хеш приходит из другого источника то там обычно строки как ключи, и тогда ф-я в которой ты обращаешься по символу уже не работает. Это же больше невнятности вносит чем помогает.
>>873799 Запили сайт с ачивками. Пользователь создает себе задачу "Накодить двач" или "выпилится" лол выставляет время 3 недели. Переодичски отмечая свой прогресс, пользователь получает это достижение. Потом в страничке своего профиля сможет пофапать на них. Можно сверху запилить сообщества, набры стандартных достижений, друзьяшек, ачивку дня и т.д. Вот такое вот вэб-приложение мотиватор.
>>873888 Ну я бы не советовал. Жава господам просто неудобно будет с удобной и юзер-фредли жабы пересаживаться на руби. Хаскель норм, даже веб на нем есть.
>>874107 >>874151 Не писал на хаскеле ничего серьезнее хелоу ворлда. НО знаю, что есть не мало сайтов на нем, даже борда русскоязычная на хаскеле написано. И это не шутка. Плюс фреймворки от эрланга набирает неплохо обороты. Там свои нюансы, но производительность и скорость выше той же ноды или руби. Имхо если вкатываться джава анону, то в какую то из этих технологий. Опять же на руби по прежнему много работы, в ближайшее время ее не убавится, а язык все такой же приятный для пользования.)
>>874271 Ну вот у меня и была такая мысль, заняться руби и потихоньку смотреть/изучать на эликсиры с фениксами, а там как взлетит.
Еще есть мысль в мобайл(iOS) переключиться, но не знаю стоит ли того, все таки другая область, да и не понятно как-то все будет в ближайшее время. Для себя пару приложений запилил таки.
>>873888 Я бы не стал. Сам сейчас сижу на руби и эликсире + фронтенд. Но все эти рельсы, активрекорды, кукумберы, динамика, диалайзер-костыли меня уже доебали (а вот фронтенд в умеренных количествах нравится пописывать). Планирую перекатывать на скалу, в кровавый энтерпрайз, но понимаю, что джавой тоже придется скорее всего заниматься. Алсо, расскажи почему вообще возникли мысли о переходе с джавы на руби?
Меня тоже что-то заебали эти динамические языки. Первые пару месяцев это дает буст к производительности, но потом понимаешь преимущества статической типизации. Скала выглядит как донельзя перегруженная фичами жава, хаскель малопопулярен, F# тоже, C# разве что... Ну или в совсем крайнем случае писать фронтенд на TypeScript'e. React + Redux + Immutable.js пробовал, понравилось. Да, есть бойлерплейт, но это лучше, чем метаадок рельсов.
Как мне заставить regex кушать CRLF вместо обычного \n ? Можно конечно же gsub-ом заменить все \r\n но это же костыли. Пиздец как я охуел когда регекс у меня один файл парсил а второй нет из-за этой хуйни.
Анон, поясни нубу за стыковку рельс и современного фронтэнда. Для некоторых фреймворков и библиотек js не так просто даже хэлловорлд написать. Все эти транспайлеры, сборщики, менеджеры и другие инструменты далеко не всегда заводятся просто от добавления подходящего гема. На этапе изучения это становится реальной проблемой. Имеет смысл разрабатывать фронтэнд как отдельное приложение? В отдельной IDE, с отдельным проектом и все такое. Если да, то как? Где-то еще видел инфу, что для этого отдельно имеет смысл поднять ноду и весь js делать через нее, а часть представления из рельс вообще убрать. Поделись советом.
Если у тебя обычный круд, юзай обычный react-rails. Если нужно будет добавить redux , переходи на react on rails. Если у тебя большая тима, то имеет смысл разделить её на фронтендеров и бэкендеров, отдавать рельсам только json. 99% что тебе хватит React-Rails.
Сап, рельсач. Пилю фильтр на Ransack. Например, есть person у которого has_many cars и has_many bikes. Мне надо запилить чекбокс, который вернет всех person у которых есть хотя бы один байк. ХЕЛП!
Есть две rails-апликухи. Первая на рельсах 4.2.6, вторая на 5.0.0 Из второй апликухи надо сделать mountable engine для первой. Возможно ли это с сохранением версий рельс для обоих апликух?
Что скажете о геме https://github.com/globalize/globalize ? Эта штука создает для каждой таблицы в которой надо хранить поле на нескольких языках дополнительную таблицу model_translation. Я только начал создавать бд и у меня уже есть 5 вспомогательных таблиц, которые имеют связь с основной, 4 из них должны иметь переводы. Получается надо делать джоин на 5+4=9 таблиц и это только начало, это норма или нет ?
>>876856 Так это получается надо будет костыли в виде хелперов на каждый атрибут писать вроде if current_locale == :en Можно в модели виртуальный аттрибут запилить но это тоже немного костыльно.
>>877219 Ты его используешь ? Просто гитхаб выглядит заброшенным. >>877283 Если ты про локализацию в yml файлах то это не то, мне надо хранить данные на нескольких языках а не переводить вьюхи.
у меня жопу рвет уже, делаю по тутору книжному, постоянно решаю какие то ребусы и ошибки, вылетающие при исполнении кода этого тутора. ТЕПЕРЬ ТО ЧТО НЕ ТАК?
1) попробовал вообще убрать ковычки кроме ключевой фразы ("Demo Blog") - undefined method `content' for RSpec::ExampleGroups::StaticPages::HomePage:Class
2) попробовал сменить '' на ' - та же ошибка, что и раньше. Попробовал скопировать код из книги без своих изменений(Demo Blog -> SampleApp) - нихуя. я испытываю анальные боли и желание начать изучать другой фреймворк для блистательного влива в быдлокодеры
в общем, нашел нестандартный солюшн. 1) нужно обновить капибару до выше, чем 2.2, посылая нахуй требования учебника в 2.1 2) нужны gem 'database_cleaner' в гемфайл, require 'database_cleaner' require 'capybara/dsl' для спек и рейлс хелперов в папке /spec/ 3) много ебаться.
>>878085 бля парни rails / ruby учить уже реально поздно. вот реально, вы потом вспомните мои слова. спрос скатился на нет. инфа от инсайдера руби тусковки
декоратор не нужен: хочешь написать свой велосипед — добавляешь в модель миксин, который подгружает аттрибутов модели, где-нибудь берет для этих аттрибутов локализакию и как-нибудь мутирует модель, добавляя названия.
как видишь, я частично пользовался этими ссылками чтоб решить проблему. А конфиг я не трогал, такие дела. Я третий день ваш этот руби изучаю и просто делаю по книжке, ничего не кручу и не трогаю. И получаю уже третий баг. автор - пидор А другие книжки не настолько полные/удобные к прочтению.
Без миксинов ты в любом случае нарушишь DRY в случае если нужно задекорировать больше одного ActiveRecord класса.
2. ActiveRecord это антипаттерн, так что SOLID боги обмазаны гавном by design, увы.
3. Ты нарушаешь KISS, мне блядь нужно будет помнить о 50 задекорированных классах. Нет, спасибо, пусть миксин декорирует.
Вообщем, когда я и остальные люди в подобных случаях просто будут использовать ' include MyTranslationModule' в соотв. модуле (или гем, что автоматом заинжектит 'MyTranslationModule' во все модели ActiveRecord) ты ебись со своими декораторами, кловун.
Начитался блядь книжек о паттернах, а как их использовать не понимаешь.
>>878334 DRY в случае рельс это нередко перегиб. То что там есть уже говно в рельсах, не значит, что нужно еще больше накидывать. У тебя весь код, нужный для presentation layer лежит в модели, да? лол, если правда.
>>878372 Стой стой стой, не уходи от сути. Ты считаешь, что модель должна иметь доступ к контексту I18n и вообще заниматься облагораживанием сырых данных для юзера?
Не обязательно юзать декоратор, даже хелпер будет лучше того говна, которое ты предлагаешь.
>>878422 Чувак же изначально говорил, что у него в базе хранятся строки на разных языках, полученные от юзеров. В таком случае это не и18н в привычном понимании. Это безусловно часть модели.
>>878446 Он хочет модуль добавить, который автомагически будет всё делать, основываясь на текущей локали, а не вручную писать def translated_attribute(locale) end
>>878478 >Нет, не будет Почему нет? Хелпер явно вызывается, а декоратор мимикрирует под оригинал, и поэтому не нужен. Это экономит кучу времени и нервов в будущем.
> декоратор мимикрирует под оригинал, и поэтому не нужен
Ок, иди ^нахуй^ пиши всю логику модели в хелперы, он ведь явно вызывается.
Спор идет о форме декоратора, хуй выше предложил на каждую модель хуярить по классу, я сказал — нахуй; хватит (неявно подгружаемого) миксина и одной строчки в декорируемую модель.
>>878681 >пиши всю логику модели в хелперы, он ведь явно вызывается Если так упарываешься паттернами, нахуя тебе модель? Какая в ней логика должна быть? Ее вообще нужно заменить на датамаппер, хуесос ты диванный
> Ткни, где тебе предлагали писать по декоратору на модель.
Там, выше (>>878681) есть ссылка на этот код, где ты показываешь на примере UserDecorator как плодить лишние сущности, как мудак, что не знает, о понятии Бритвы Оккама.
Но ты и дальше продолжай в глаза долбится, кловун.
Нахватался баззвордов, а смысла не понимаешь. Даже не можешь свою позицию толком объяснить, только вопросы типа: "ОЛОЛО, а зачем нужен ХЕЛПЕР???", задаешь. Но, зачем, спрашивается, вопросы задавать, если ответы которые ломают твой мир, отрицаются, жертва Стокгольма, блядь.
> Если так упарываешься паттернами, нахуя тебе модель?
Иди нахуй, с такими вопросами. Разберись, для начала когда код идет в хелпер, когда в модель, когда блядь нужно подключать враппер и минусы и плюсы каждого подхода.
Тогда и поймешь, когда имя аттрибута кортежа декорируется, а когда достаточно вынести код в хелпер вьюшки (подсказка, дело в DRY, за который ты по-человечески пояснить не в состоянии (три раза, кловуна, спрашивал), только громко кукарекаешь : 'ко-ко-ко DRY в рельсе не нужен, КО-КО-КО вредно, ко-ко-ко боги SOLID'.
Вообщем, порвался, с придурка. В игнор, иди дальше сука плоди свое говно, вида: class UserDecorator, class OfferDecorator, class TvouaMamashaDecorator, вместо миксина и вызова однострочного метода. Да и не забывай, половину логики в хелперы пихать, чтобы твой сука, код ещё больше на лапшу походил, бог solid, блядь.
>>878748 Че ты несешь, шизоид? Нас здесь больше двух. Декораторы и хелперы в данном случае - альтернативы, а не дополнения друг к другу, ебанутая истеричка. Так что там насчет датамаппера? И DRY не всегда нужен
Можно ли юзать популярные фронтендовские фреймворки (ангулярчик, реакт, эмбер) с рельсами? И как это вообще все происходит? Рельсы по сути высылают фронту только json, да? А он уже с ним ебется. Интересно просто как происходит написание сайтов на рельсах + фреймворках. Там же получается рельсовские вьюхи будут не нужны, да? И какой фреймворк посоветуете?
>>878797 Я тоже пытался спросить об этом здесь >>875787, но на самом деле не понимал сложности вопроса. 2-3 трудных дня у меня ушло только на общение с гуглом. Признанной лучшей практики на этот счет я найти не смог и даже не совру, если скажу, что вполне равноправных рабочих решений существуют десятки.
Между прочим, хорошая иллюстрация различия философии руби и остальных языков. Если гемов в общем доступе на сегодняшний день около 100к, то пакетов для js уже больше 500к. При этом в js гораздо больше вариантов решений одной и той же проблемы, каждое из которых не доработано. Благодаря синтаксису и архитектуре руби люди с большей охотой разбираются в чужом коде и дорабатывают существующие решения, когда в js никто не хочет разбираться в чужом некрасивом коде, а просто начинают по сто раз изобретать один и тот же велосипед. Мне кажется, именно это и делает руби языком будущего вопреки трендам и проблемам с быстродействием.
Присоединюсь со своим вариантом. Создаем отдельный модуль с названием, например, AttributeTranslator у которого добавляем статический метод translate(object, prop, lang), который выглядит как-нибудь так: object.public_send("#{prop}_translations")[lang].
Плюсы: В отличие от хелперов доступен везде, но при желание его вызов можно обернуть в хелпер. Не нужно добавлять миксины в модель и засирать ее логикой (привет, DHH). Легко тестируется + для тестирования не нужно создавать тяжеловесные инстансы AR, достаточно обычного PORO.
Развели тут декораторы, миксины в модель, вообще охуеть.
>>878880 > ну раз один класс, то это очевидный модуль, а раз модуль С фига ли? Ты когда хочешь приклеить стикер с хуями к своей жопе, требуешь чтобы на все жопы лепили такие же стикеры?
>>878932 Так вот и я о чем. Выше писал, что декоратор это просто пример, можно и хелпер, можно многое придумать, лишь бы не срать в модель как того хочет dhh-кун.
>>878947 Я просто жду, пока WebAssembly не станет доступным на 70%+ устройств. Пока посижу на бэкенде, устраивать анал карнавал с ЖС совсем не хочется.
>>878947 Да без разницы, что они пилят, хоть твою мамашу своим хером. Язык популярнее => пакетов больше. Все, тхет симпл, бро. Кода на жс уже наверное больше, чем на джаве.
>>877340 >>877315 >>878932 Пора двачу пилить свой гем, лол. >>878958 И что тогда ? Сделают транслятор си/жабы/руби/питона в жс ? Нет, ведь тогда надо будет тащить кучу зависимостей по сети.
Давай всю логику над примитивами вынесем в отдельные модули. Не ну а чё, Матц засоряет String методами типа upcase. Если в дефолтном руби держатся библиотеки, типа Enumerable, то почему ты, хуй, кукарекаешь на библиотеки с аналогичной логикой работы уже в Rails?
То, что модели active record перегружены — другой разговор.
Короче говоря, ты призываешь велосипедить, потому что до тебя повелосипедили, я понял.
>>878969 >>878958 Когда я последний раз на него смотрел, они говорили, что это не будет заменой жс в качестве компайл-таргета. Что-то изменилось? Или чего ты ждешь?
>>878962 Какой злой школьник. >Кода на жс уже наверное больше, чем на джаве. Я то думал что предназначение динамических языков в том чтобы писать меньше а делать больше, оказывается во вселенной джса все по-другому. >>878969 Сути не меняет.
в String включен модуль Comparable, который делает какую-то полезную работу.
в ActiveRecord::Base, есть миксин Translate4OTOTAM, который делает какую-то полезную работу.
В первом случае ты жрешь что дают, а во-втором внезапно просыпается твое: 'КО-КО-КО миксины не нужны, давайте захуярим классы, наследование и далее по списку'. Нечистоплотный дурачек, да и только -.-
>>878984 Предупреждаю, я другой анон. Потому что блять любой хуесос как ты может открыть документацию и прочитать про офффициальный насраж от рельс и т.п. Да, это говно, но это знают ВСЕ. А мне разбираться в твоей личной недокументированной дрисне потом? Да ну нахуй.
>>879066 Проекции от тебя еще в прошлом посте пошли, привет.
>>879080 Ну так именно поэтому они (авторы стандарта) и говорили, что оно не будет являться заменой жс в качестве компилейшен таргета. Где ты увидел противоположное утверждение, можешь линк доставить?
Из вас троих только один отвечал адекватно >>879014
Ты со своим дружком задавал бессмысленные вопросы, да сводил все к личному срачу, кловун.
Это решение, с миксинами, бтв используется в globalize и его производных.
И ни одного валидного армента против ты не смог привести.
Единственное, что мне разумным показалось, так это аргумент по усложнению уже засранного active record. Впрочем, это в первую очередь, к мейнейнерам active record вопрос.
Но, есть и другие решения.
вот, Draper::Decorator, например. Близко к варианту с кучей классов декораторов. Можешь почитать, как поливают говном,
Или простое, по-своему красивое, решение, в виде хелперов:
module ApplicationHelper def present(model) klass = "#{model.class}Presenter".constantize presenter = klass.new(model, self) yield(presenter) if block_given? end end
Вообще много чего есть.
----
А теперь ты можешь и дальше покрывать меня говном, приводя в аргументы количество, лол, человек.
Но уж прости: в этот раз уж постараюсь не реагировать буду на подобные высеры, хватит уже, покормил.
>>879107 Я от всех хуйни с локализацией и просто отпишусь о декораторах. Декораторы в том виде в котором их зачастую используют в рельсо-комьюнити и как предлагаешь их использовать ты - это полная хуйня. Я понял бы, если создавалось много декотораторов для каждой модели, например, UserDecoratorForProfile, UserDecoratorForBilling и тд, а не как сейчас одна модель - один декоратор. При таком подходе фактически код модели размазывается на два файла, профита от таких декораторов никакого, да еще и оверхед от кучи вызовов method_missing.
https://repl.it/E84g/5 Поясните почему не меняются значения в хэшэ? Нужно заменить ["1","2","3"] на ["a","b","c"], но почему-то изменения не сохраняются.
words = ["a", "b", "c"] hash['parameters'].each do |ex| if ex[0] == "translation" ex[1].each_with_index do |el, index| ex[1][index] = words[index] end end end
Аноны, нид хелп. Как выполнить действие точно при наступлении конкретной даты и времени указанного в поле бд. Поясню на примере: есть приложение для мониторинга выполнения задач. Создаем задачу, устанавливаем дату+время до которого задачу надо выполнить. Позже при наступлении указанного времени надо проверить завершена ли задача, если нет, надо отправить email о том что сроки нарушены. Из очевидного приходит в голову дергать бд каждые n минут, но возникает подозрение что это немного костыльно. Алсо задания могут создаваться отдельным приложением к оторому я не имею доступа.
>>883345 Ну я уже вижу баг - а что если время окончания задачи поменяют уже после того как менеджер проверил задачи ? Алсо я говорил о задачах которые таски в проекте (для управлениями которыми созданы basecamp/jira/trello) >>883385 Вот этой штукой я буду отправлять email, с этим вообще проблем нету, вопрос то не в этом.
> Ну я уже вижу баг - а что если время окончания задачи поменяют уже после того как менеджер проверил задачи ?
Погуглил чуть-чуть, если нельзя перекэшировать даные каждые n минут, то другой вариант заключается в том чтобы повесить триггер на базу данных, дабы она уведомляла менеджер о своем изменении.
Но звучит как оверинжинеринг. Неуверен, что 1 легкий запрос раз в n минут в твоем случае — это проблема.
> Алсо я говорил о задачах которые таски в проекте (для управлениями которыми созданы basecamp/jira/trello)
Идея та же самая, но нужен интерфейс для определения состояния тасков. Если его нет, как вариант, подмешивать в таск модуль с методом status для работы с ad-hom айпи basecamp/jira/trello и и т.п. сервисами.
Блин, понять не могу. Есть апи контроллер, выдает на экшене json по get. Пытаюсь это затестить рспеком. Рспек видит респонс. expect(response.content_type).to eq('application/json') Есть. Но его тело пустое почему-то. Как тут не получается https://gist.github.com/jayncoke/4a7c1a67fdc464ad66e8 body = JSON.parse(response.body) выдает [] Хотел затестить что конкретно приезжает такой json с полями или конкретно .to include_json ЧТо я упускаю?!
>>883814 >>883821 Разобрался, там вышла путаница в конструкторе. Говнокода того. Выборка из базы в переменную, удаление записи и рендер переменной. Рспек получается ее не видит и не рендерит.
Рубаны, поясните за RubyMine. Почему его так не долюбливают? Пытался юзать vim, emacs, atom - всё это опенсорсное говно, сколько не допиливал, всё равно чего-то не хватает, а в RubyMine всё из коробки. Ну да нужно платить, пожалуй единственный минус
Мне нужно получить наименования всех товаров всех магазинов заказанных пользователем в плоском списке из любого места в иерархии. То есть, я должен по пути, включающем в себя как массивы, так и вложенные документы, выдать от произвольного embedded документа список значений полей.
>>886289 Используешь монго для описания реляционных отношений - страдай. Если при этом ты используешь embedded массивы и/или embedded сущности, которые описывают объект, связанный не только со своим родителем - ты дебил. Если у тебя еще и вложенность многоуровневая - ты просто космический дебил, извини.
>>886323 Извини, эту хуйню не я придумывал, я тут человек маленький, и стиль нашей великой разработки "Лучшей команды в компании" мне оспаривать запрещено.
Анон, помогай. Короче в рельсах хочу сделать конфиг для класса, чтобы можно было писать
``` # config/initializers/my_lib.rb MyLib.configure do |conf| conf.val = 42 end ```
Делается это просто (и работает):
``` module MyLib class << self attr_accessor :configuration end
def self.configure self.configuration ||= Configuration.new yield(configuration) end
class Configuration attr_accessor :val end end ```
Но проблема в том, что в development-окружении рельсы делают лайв-релоад кода. А после реалоада класса настройки, как можно догадаться пропадают, потому что сделаны были в инстанс-переменной в инициалайзере. И не в этом даже проблема - рельсы не перезагружают класс, если он не менялся. А вот ебаный delayed_job перезагружает классы после каждого таска - https://github.com/collectiveidea/delayed_job/blob/master/lib/delayed/worker.rb#L321
У меня есть надежда, что есть какой-нибудь способ заставить настройки сохраняться/переинициализироваться. Ведь это распространенная практика и не видел чтобы кто-то жаловался на такие проблемы. Я читал сегодня что-то релевантное про функционал в railties, какие-то хуки там есть, но так и не разобрался, как это работает и применимо ли к этой задаче. Анон, что можно сделать?
Там рассказывается о каллбеках: to_prepare, to_reload которые вызываются перед вызовом Reloader. Обрати внимание, на контекст где вызываются каллбеки.
Зарегистрировав вызовы, можно сохранить и восстановить состояния библиотеки, немного костыльно, но для development mode сойдет, а hot code reload для остальной части проекта будет работать.
>>887352 >>887393 Большое спасибо тебе, анон! to_prepare решило мою проблему.
Я вчера был очень близок к нему, но неправильно начал делать - пытался создать рейлти для своего класса MyLib::Railtie < ::Rails::Railtie; def to_prepare ... end; end Сделать переинициализацию таким образом не получилось.
Первый твой способ не заработал хотя я не понял в чем его суть.
> Первый твой способ не заработал хотя я не понял в чем его суть
Просто не понял зачем код переусложнять. Если предполагается, много конфигураций, то инстансы Config не надо создавать через синглтон модуля. Как вариант:
module MyLib
class Config attr_accessor :var
def initialize(args) yield self @var ||= args[:var] || 17 end end
def self.config @config ||= MyLib::Config.new end
def self.config=(other) @config = other if other.kind_of? MyLib::Config end
end
Тогда текущая конфигурация будет настроена, например, так
MyLib.config = MyLib::Config.new do |config| config.var = 42 end
Или так
MyLib.config = MyLib::Config.new(:var => 5 )
Или так
MyLib.config
А как хранить все варианты конфигураций, это другой вопрос (если коротко: Hash внутри MyLib). Если вдруг решишь поиграться, то прости код писал вслепую, могут быть ошибки.
А первый вариант, это еще более простой вариант, так как я полагаю, что одного конфига хватит за глаза.
---
Ну а потом, я слепое, прочитал что ты на самом деле спрашивал и полез смотреть в рельсу…
Двач, а как лучше реализовать связь между таблицами когда в одном случае надо сделать C->B->A а в другом случае напрямую C->A , потому что иногда записи в таблице B, которая связанна с записью в A просто не существует. Конкретно бд связана со скинами в игре cs:go. Возьмем например Desert Eagle | Бронзовая декорация, тут Desert Eagle - базовый предмет(оружие), Бронзовая декорация - название скина(который влияет на внешний вид но не характеристики предмета). Соответственно информацию о самом предмете храним в таблице A, а о скине в отдельной таблице B, потому что скинов для одного вида оружия может быть много. Проблема в том что существуют предметы для которых в принципе нету скинов они сами по себе предметы которыми можно обмениваться (т.е например Desert Eagle отдельно без скинов вообще не существует но есть например ключ для открытия кейсов который можно обменять)
Посоветуйте толковый планировщик задач. С функцией выполнения задачи в определенное время и эту задачу может ставить пользователь. + возможность повторять задачу.
Сначала был whenever + cron, но чет неудобно crontab обновлять из апп.
Решил остановиться на sidekiq + sidetiq. Но последний оказался... каким-то конченным. Всем подходит (даже при факапе может "задним числом" выполнять и вебинтерфейс няшный), но вот, сука, выполняет задачу сразу после запуска, хотя она поставлена на опр. время. Как будто там собственный таймер и вообще хуй проссышь, че и как там. Issues дохуя и не мейнтейнится активно.
>>888384 > Тут либо STI (как самое простое) Я что-то вообще не пойму как его тут использовать. > либо полиморфная связь. А вот это то что надо, похоже.
Может кто-нибудь книгу подсказать, она именно по ruby (не rails), типа ебанутая книга какая-то, тут еще говорили, что крышак от нее может съехать, если вдумчиво изучать. Сорян, больше ничего о ней не помню.
>>892811 Недавно на него съебал, оче годно. Единственный минус - молодая экосистема, поэтому многое приходится писать самому, но так как комьюнити достаточно активное - то это временная проблема и уже не так ощутима, как, например, год назад.
Анон, как определить, на каком языке написан сайт, если это php, то там сразу видно, тоже самое и про js. Но, как определить, что это питон или руби. Простите, за глупый вопрос.
>>893124 Заранее хочу оговорить, что я еще на стадии изучения Ruby, RoR и метапрограмирование не изучено. html знаю но не 5. php сам говорит, что сайт написан на нем, а в js все действия (Не только анимация.) выражены через оные скрипты. Если что, то я смотрю, через просмотр кода браузера.
Книга по руби переведена на рус. покупать я ее конечно не буду, но прочитать - бы прочел Есть "Электронная версия" на том же сайте издателя. Если кто найден - закидайте линками.
Анон, расскажи или дай хороший пример или статью про так делать FormObject. Видел кучу примеров, типа как на пикрелетед, но это не то и слишком поверхностно, не решает реальных задач, для которых действительно был бы полезен форм-обжект. Всегда речь идет только о создании, апдейта нет. Постоянно пытаются впихнуть этот Virtus кстати, поясни за него, анон, есть ощущение, что это раздутая магическая еба, не понятно как быть с валидациями (оставлять в моделях или уносить в FO, есть разные подходы), не понятно как быть с has_many вложенностью. И тд и тп.
>>894466 Валидации конечно должны быть в FO, иначе весь смысл проебывается, а смысл - не нагружать наследников ActiveRecord::Base всякой ебалой, которой там не место, это должен быть всего лишь маппинг к ряду в базе со скоупами и ассоциациями. По поводу того как быть has_many, прелесть FO как раз именно в том что ты что хочешь то и делаешь, код же экспликтный никаких колбэков и прочей хуеты. Попробуй создать свой форм объект без использования каких-либо гемов, чтобы понять суть, вот какой интерфейс сочтешь логичным и приятным такой и пили. Сорян если сумбурно
А как успешные рубисты автоматизируют запуск различных серверов/фоновых задач (postgre/redis и т.д.) в девелопменте, как я понял есть всякие chef / capistrano но они для развертывания в продакшене ? Открывать по сотне вкладок в терминале для запуска всего этого добра как-то неправильно.
>>895865 Спасибо. Пару вопрос, если можно: - Зачем там Virtus? - Почему объекты передаются в инициалайзере, а параметры в сабмите. Почему не наоборот? Просто если наоборот, то форму можно использовать как `form.valid?`, а так можно использовать только `form.submit(params)`. - Что на счет практики сохранения в FormObject - стоит ли ее там держать или лучше уносить в ServiceObject?
>>896314 - Можно без виртуса, но с ним удобнее (есть более приятные альтернативы, гугли) - И там и там нужно. Представь что у тебя модель с дефолтом, при инициализации этот дефолт должен быть в атрибуте форм объекта, при этом сабмит - это отдельная операция сохранения, переданный параметр должен опять записаться в атрибут - Нет никаких форм объектов или сервисных объектов, эти ограничения и рамки ни к чему, есть просто plain old ruby objects, где и как считаешь нужным так и сохраняй
>>896322 1. Просто в примере он не используется. Как раз сейчас читал про dry-types упомянутый выше. И чет прихуел от их dry-проектов. 2. Э нет. Форма - работает с формой мне больше нравится слово input. Если есть дефолты, то они на ней и должны быть определены. А сабмит да, операция сохранения (которой в некоторых реализациях может не быть) и объекты нужны только ей. До момента сохранения мы абстрагируемся от хранилища. 3. Ну речь же про паттерны. Вот форм-обжект это недообъясненная вещь. Возможно даже недопаттерн. Я так понял, что это composition-pattern, но обросший особенностями конкретного применения в рельсах. Я для себя понял это так: форм-обжект про композицию и валидацию, сервис-обжект про процесс. В простых случаях, когда нужна только персистенция, мы можем процесс сохранения добавить в форм-обжект. Если процесс чуть более сложен , то его стоит уносить в другое место.
>>896341 1) В примере используется, смотри attribute 2) В твоих словах есть смысл, а теперь представь что эта же форма используется для апдейта и ты закидываешь туда готового юзера например. Атрибуты должны подхватиться для отображения ДО того как ты вызвал submit, потому что какой нахрен сабмит, еще ничего не показывали 3) Я бы рассказал что паттерны не нужны, но закидают помидорами, поэтому попробую ответить на твой оригинальный вопрос: если бы атрибуты сохраненного объекта приходили из юзер инпута, я бы сохранял в форм обджекте, если из моей же системы и мне не нужно ничего валидировать то в сервис обджекте
>>896408 > 2017 > Докер > Ебаться с орекстрированием, пробросом портов, персистенцей Расслабься хипстерок, все уже забили на твой докер, мода прошла, можно больше не вставлять везде
>>896479 >пробросом портов одна строчка в docker-compose >персистенцей пол строчки volumes >орекстрированием значение знаешь?
>Расслабься ку-ка-ре-ку! Так бы сразу сказал что нюфаг и не осилил. Но лучше подразберись, а то скоро без знания докера вакансий не останется, только пхп-параши драить разве что.
Если уже знаю пару ЯП, и представляю что такое ООП, и всё такое, подойдёт ли learnxinyminutes для ознакомления с синтаксисом? Или в руби есть особые подводные камни?
Блин, не могу понять че за фигня. Кароче есть СИнатра, пытаюсь добавить webshim-polyfiller как тут написано добавляю в layout.haml %script(src='/javascripts/js-websim/minified/polyfiller.js' type='text/javascript') хотя type вроде и не обязателен javascripts ложу в public. Получаю "NetworkError: 404 Not Found - http://localhost:9292/javascripts/js-websim/minified/polyfiller.js" ФФ еще говорит The resource from “http://localhost:9292/javascripts/js-websim/minified/polyfiller.js” was blocked due to MIME type mismatch (X-Content-Type-Options: nosniff). Если просто ложу в корень javascripts скрипт файл - не ругается. ЧЯДНТ?
>>897291 Если тебе нужно понять поверхностно код на руби, то подойдет. Если хочешь начать писать на нем как можно быстрее, минуя подводные камни, то не подойдет.
Я нуб, пилю закрытый сайт уютненького сообщества с регистрацией по инвайтам и элементами социальной сети. На сайте есть пользователи, некоторые пользователи могут быть админами. Возможно потом добавятся и другие роли.
1. Как реализовать инвайты? Я хочу чтобы пользователи могли регаться и по почте и через вконтакт, как им удобнее. Гем devise_invitable как я понял работает только с почтой, поэтому я запилил свой велосипед. Пользователь жмёт кнопку и создаёт ссылку с инвайт-кодом вида site.ru/register?invite_id=<UUID> (код - это просто UUID). Код сохраняется в БД. Потом передаёт ссылку любым способом своему другу, тот переходит по ссылке, RegistrationsController проверяет код и разрешает другу зарегистрироваться. Регистрация обычная, через devise. В будущем я добавлю разные виды инвайтов для админов и простых пользователей, сделаю ограничение срока годности и количества создаваемых инвайтов. Это норм способ? Есть варианты получше?
2. Как правильно запускать сайт в продакшен, если регистрация только по инвайтам? Сейчас я создаю аккаунт суперадмина с максимальными правами через seeds.rb, логин/пароль храню в ENV. Потом приглашаю обычных админов и больше не пользуюсь этим аккаунтом. Это норм способ? Как поступают взрослые дяди в таких случаях?
>>897677 Если для тебя это очевидно, то ты не будешь долго задерживаться на этом момементе, так что я считаю, что ты можешь пройтись по рекомендованному списку.
>>860724 (OP) Imagemagick отказывается читать файлы. Нужно что бы пользователь загружал изображения, а потом могу их простейшим образом редактировать. Редактирование работало бы если бы не одно но - сейчас rmagick (как и minimagick) выдаёт ошибку -couldn't find file or directory. То, что файлы есть в нужной папке 100%, не работают как абсолютные, так и относительные пути. И браузер тоже открывает эти файлы. Что это может быть?
Хочу сделать чтобы ассоциацию habtm можно было установить только для определенного подмножества модели. Например есть 3 модели: Товары, Типы товаров, и 3 таблица которая может быть связана только с товарами определенного типа. Вроде бы STI то что нужно: создаем дочерний класс для отдельного типа товаров (Sock) и в 3 модели(SocksSet) пишем has_and_belongs_to_many :socks. Но я не пойму как вместо того чтобы делать отдельное поле type в таблице товаров (чтобы хранить имя дочернего класса) узнавать имя из связи товары<>типы товаров.
>>902829 Ну так допустим у меня есть набор носков (который относится к отдельной модели наборов), я не хочу чтобы к этому набору можно было добавить трусы ( а если будет простая ассоциация товары <>наборы то это можно будет сделать)
>>902832 такая задача решается на уровне приложения а не базы, просто храни в наборе разрешенные категории и не разрешай добавлять товары из других категорий
>>902843 Т.е. надо сделать валидацию ассоциаций ? Опять же не пойму как это сделать validate :method_name вызывается только при сохранении , а если устанавливать связь через = или << этот метод не будет вызван.
>>904231 Забудь про колбэки и валидации в моделях, ни один приличный рубист в 2017 таким заниматься не будет, пили форм объект в котором экспликтно все и провалидируешь
Анон, что думаешь о Hanami? Каждый день вижу новые статьи или как минимум упоминания в англоязычных твиттерах и медиумах, а по-русски ничего нигде ни разу.
>>904868 Хорошая штука, но слишком поздно появилась. В 2017 году, если уж отказываться от инфраструктуры рельсы, то проще сразу эликсир с фениксом взять.
Пилю систему с использованием внутреннего баланса. Быстрым гуглением вроде прояснил все моменты: локаю баланс покупателя и продавца, в транзакции продавцу начисляю деньги, у покупателя снимаю(с учетом комиссии сайта), записываю в таблицу истории операций ид товара, сумму, ид покупателя, ид продавца, время операции, тип(покупка/пополнение/вывод). Собственно как еще обезопасить (что еще надо делать, какую еще информацию хранить в бд), чтобы потом не охуеть от того что деньги проебались/спиздили.
>>906675 Рельсы справляются с задачами, решения которых от них ждут, а на дешевые вбросы вроде твоего здесь еще не было реакции более активной чем этот мой ответ.
>>906675 Все адекватные уже давно понимают, что рельсы мертвы, даже по рынку вакансий это можно взглянуть и понять, ибо их все меньше и меньше с каждым годом. Да и все крутые компании уже ушли с рельс на что нибудь типа ноды или низкоуровневое. Другое дело, что программисты на руби все еще имеют смысл, так как кода написано куча и кто то его поддерживать должен.
>>906691 >Node Это шутки такие? Туда до сих пор нормальную работу с базой не завезли, в 2017-то! Не знаю какие хипсторы в это играются, ни одного здравого проекта на ноде я ещё не видел за 6 лет.
>>906801 Это типичный вопрос нодофага? Да хотя бы транзакции, например. Может я чего-то не знаю, и за этот год действительно кто-то там скакнул вперёд, но чет не слышал.
>>906821 Это типичный ответ от рельсофага? В npm куча модулей для транзакций. Давай на конкретном примере, что в рельсах лучше чем в ноде или чего в ноде нет, что есть в рельсах.
>>906903 >В npm куча модулей И все работают через жопу. Конкретный пример с транзакциями: чтобы воспользоваться транзакциями - поставьте вот этот модуль.. или вот этот, или вон тот. Нахер так жить? Одной ORM недостаточно для этого? Для чего ещё нужно поставить модули, что и так должно работать искаропки? Удобства в ноде нет, зато есть ненужная асинхронность, которую тоже надо отдельно выключать.
>>907076 Что-то вроде "используй ту же базу данных, что и деофл" например, если у тебя в дефолте постгре, то остальные тоже будут с постгре Да, еще там кодировку ту же использовать и еще какое-то свойство (рооl, как понял - ставит максимум для тредов)
>>906959 http://docs.sequelizejs.com/en/v3/ Вот же, первая ссылка в гугле. Не знаю, о чем с тобой говорить, если ты не можешь 2 секунды потратить, прежде чем начать нести чушь.
Веб-сервер и рельсы конструктивно находятся в одном приложении? Или это два процесса, общающихся между собой? (еще +бд)
И еще. Веб-сервер нужен лишь затем, чтобы ловить запросы из внешней сети? То есть это просто посредник между рельсами и юзером? Веб-сервер просто передаёт HTTP без изменений маршрутизатору рельс или как?
>>907709 >Веб-сервер и рельсы конструктивно находятся в одном приложении? Это одна программа. >Или это два процесса, общающихся между собой? (еще +бд) Обычно БД это как раз отдельная программа(postgresql/mysql/oracle). Хотя можно сделать на sqlite который будет встроен в виде gem'а в процесс рельс (руби который всё это загружает). Но конкретно рельсы это одна программа которая принимает HTTP-запросы (собственно это и есть веб-сервер) сидя на каком либо порту.
Однако для распределения нагрузки, безопасности или другим причинам рельсы часто ставят за прокси типа nginx.
При этом на одном веб-сервере может крутится несколько rails приложений. Одно из крупных обновлений 5 рельсы, когда осуществили переход с single-thread веб-сервера webrick на пуму бтв.
Ассоцировать рельсу и web-сервер как неделимую сущность не нужно, так как на той же пуме ты можешь (запустить веб-приложение, написанное на другом фреймворке, скажем, на синатре.
В тонкости различий веб-серверов можешь вникнуть погуглив по ключевым словам: webrick, puma, unicorn, passenger, у меня если честно нет желания пересскажывать этот интернет, спасибо.
>>908139 Они не умерли, а умирают. Причем только в начальных стадиях отмирания, даже новые проекты на руби/рельсах еще начинают, а уж легаси хватит на многие годы. Минимум лет 5 еще можно о недостатке работы не беспокоиться. Я бы на твоем месте лучше побеспокоился о том, что через пару месяцев заканчиваю универ и все еще не нашел (не искал?) работу.
>>908149 Я работал уже. На постоянке в маке, лол, а удаленно делаю и администрирую мини-сайтик на простеньком html-css-js и пара php-скриптов. За небольшие гроши.
Был на одном собеседовании дизайнером электронного обучения, но не могу на фулл-тайм пойти работать из-за универа, а щас так вообще диплом начинается.
Планирую после универа пойти уже на серьезную работу или найти хорошую удаленку.
Алсо можно ли диплом написать на что-то связанное с рельсами/вебом? Посоветуйте.
>>908169 Так и вижу, как ты 24/7 диплом ботаешь. Я вот себе преддипломную практику нарисовал, а сам в это время нашел работу и к моменту написания диплома у меня уже было по чему писать, хоть и тема выдалась смехотворной, но многие и этого не осилили.
>>908539 Весной поздно, пока туда-сюда - уже диплом писать надо будет. Рекомендую с февраля или вообще сейчас. Не надо искать "практику", просто ищи работу, а там уже себе бумажку вырулишь, типа практику прошел.
>>909463 Вот он - ерохин от программирования! "можно", "что-то подобное", "не лучшее решение". Что ты блять несешь, хуесос? Иди активными продажами занимайся, там любят такие разглагольствования.
Анон, а ты там зареган или может даже находил работу мечты? Короче не знаю как продать пост, просто поясните за сракедин. Насколько он популярен в it-среде, имеет ли смысл в рашке, что это вообще и как работает? Просто все чаще попадается на глаза и не в связи с блокировкой.
>>911205 > Насколько он популярен в it-среде Меня там регистрироваться заставляли как-то в добровольно-принудительном порядке, но через полгода примерно положили болт. Эта штука больше популярна в околоменеджерских кругах наверно.
>>911877 Это значит что в момент загрузки кода этого класса будет вызван метод ApplicationCable::Connection.identified_by(:user) И больше ничего в этом магического нет.
Так я таки не понимаю, стоит ли мне лезть в руби и рельсы в 2017 с первой работой? Вообще я мамким борщехлеб уже года 3 и знаю довольно много всего: jsы, ангуляры, с + opengl, андроед(есть пару прилаг), джавастафф(мог устроиться мартыхать на спринге), в последнее время активно эрганг колупал, ну и хачкелем раньше щекотал себя, куда уж без него. Разумеется все это знаю не на охуенном синиор уровне, но сейчас приперло с едой деньгами и надо искать работу. Вот думаю куда коммитить время\силы. Этот ваш рубин нравится, все охуенчик, но не хочу проебаться с тем, что джуна хуй куда возьмут(я из бульбы).
>>912388 Я из украшки алсо, учу руби, рельсы и весь смежный стак. Работы очень не много, но вакансии есть. Планирую к лету уже отсылать резюме, а пока заканчиваю шарагу.
Если у тебя есть столько всего, то нахуй тебе руби не ясно. Иди в андроид, если даже аппов пару есть.
>>912401 От джавы блевать хочется(особенно после рубей) а котлин мало кто юзает, там хоть кучу сахарком посыпали Еще у меня такое чувство что в андроид сейчас каждый 1 школьник идет, куча знакомых дрочит, бывших одногруппников, в pr треды активные и там 90% вкатывальщиков. Мне кажеться от такого предложения работодатели совсем охуевшие будут.
С Руби сложно устроиться имея из опыта только учебники и простые приложения(бложики, тудулисты, клоны твиттера и ну ты понил). При этом Руби в большей мере предрасполагает к тому, чтобы ты получил нужный опыт без работы в конторке. Сделать интересное приложение или вложиться в опенсорс на Руби определенно проще, чем где-либо еще.
>>912422 А можешь накидать каких годных идей уровня: с чем возьмут? Только не ебучие имиджборды Бля, я сам думал неспешно кодить в удовольствие, наваять пару веб-апп(идеи есть, но это месяца на 3-4 минимум) и поизучать сорцы разных интересных гемов, но сейчас настал пиздец в жизни и у меня максимум 2 месяца чтобы пойти на работу и не сдохнуть через пол года от голода, но в джавапарашу мне все равно очень не хочется валить
>в джавапарашу мне все равно очень не хочется валить
Джава отличный язык с кучей отличных технологий и людей вокруг, зря ты так. Да и JRuby во многих случаях лучше простого Руби.
>А можешь накидать каких годных идей уровня: с чем возьмут? Только не ебучие имиджборды
Слово "накидать" трудно применить в отношении чего-то годного. Конкретно действительно не могу сказать, индивидуально же все. Самих по себе годных идей нет, бывает только годная реализация. Я бы выделил как критерии: пользуешься ли ты сам тем, что сделал, пользуются ли другие и многие ли могут так же. Если в один из них попал, то это гораздо лучше типовых гостевух. Если интересные идеи в голову не приходят, то можно взять первое, что пришло в голову и сделать это с нетипичным стеком технологий. Главное движение, на волшебные идеи надеяться бесполезно.
Просто не будет, но ты не выглядишь как неосилятор. Должен справиться.
>>911973 А вот это уже хуй его. Попросту говоря в момент когда ты скармливаешь интерпретатору файл с кодом. Или когда внутри другого кода реквайришь зависимость. Короче гугли как рубишный интерпретатор работает.
>>912452 >пользуешься ли ты сам тем, что сделал, пользуются ли другие и многие ли могут так же Первые два сразу мимо т.к. я сыч и в инете сижу на 2-3 сайтах(youtube, двач и вк), не считая сайтов с доками, репозиториями и туторами и переполнениестека, мне от интернета нихуя не надо. А чтобы пользовались другие,даже с божественной и всем нужной прогой, должно пройти время и надо хотябы минимально пиарить на всех этих харбах редитах, конфах и т.д. Остается только третье. С другой стороны меня блевать тянет от мысли реализовать что-то, чего и так, как говна в авгиевой конюшне, все эти туду листы, имиджборды, блоги. Ну хз сейчас начну на листик выписывать все что приходит в голову подряд, комбинировать и думать что из этого можно выбрать для реализации. Но надеюсь двач тоже подкинет каких-нибудь идей или направлений.
Кстати, ебашить буду на rails + react + postgre + yaml/препроцессоры и джаваскрипты , это норм стек, смузи нальют? Для скриптов что лучше брать, кофевара или es6 какой-нибудь?
>>912862 >Первые два сразу мимо т.к. я сыч и в инете сижу на 2-3 сайтах Даже к этому можно подойти с фантазией. Кто-то, например, Перекотер для двачей сделал. Хорошая предметно-ориентированная штука. Автоматизировать можно очень многие повседневные задачи. Хоть таск-менеджер в области ухода за домашними моллюсками, имеющий вменяемый интерфейс и посылающий уведомления в телеграмм когда нужно помыть террариум. Смотри на мир шире двача и вк.
>пиарить на всех этих харбах редитах, конфах и т.д. Пиарить нужно то, что само по себе никому не нужно. Что-то интересное разойдется мгновенно. Да и нужно ли тебе, чтобы разошлось? Для портфолио и опыта будет отлично, даже если твоим микросервисом просто по вечерам будет пользоваться твоя мама. Я серьезно.
>Кстати, ебашить буду на rails + react + postgre + yaml/препроцессоры и джаваскрипты , это норм стек, смузи нальют? Нассать в уши эйчарам - норм, они эти слова не понимают, но любят. Еще про тесты в список что-нибудь добавить и резюме готов. По факту ты вряд ли будешь знать больше чего-то одного на нужном уровне, так что по делу будет важнее и полезнее разобраться во всей архитектуре веб-приложений. Для начала нужно врубиться как это все работает и соединяется между собой начиная с низа. Что происходит на уровне ОС, сетИ, какие объекты-методы-модули что-куда вызывают и зачем. Можно насмотреться курсов по реакту и ес6, которых теперь тысячи из-за трендовости, но не улавливать самые базовые механизмы. Если время поджимает, то лучше просто очень хорошо понять сам язык, рельсы и полезные гемы, на реакте за тебя кто-то наверняка напишет, тебе важнее это быстро и правильно интегрировать в бэкэнд.
>Для скриптов что лучше брать, кофевара или es6 какой-нибудь? Если ты имеешь в виду кофескрипт, то не трать на него время. Он больше не актуален. JS стоит опять же хорошо понять в чистом виде и если будет время то es6 и утилиты для сборки на ноде.
На девелопера руби / рельсы есть работа вообще? Для автоматизации тестирования связка руби/капибара/гем на page object актуальна, или эта ниша тоже загнулась к хуям? Руби вообще жив?
>>912934 >Руби вообще жив? Такой вопрос звучит очень часто, но только на русском языке. Есть несколько знакомых, которые спрашивали о том же будучи в целом далекими от мира веба. Оказалось, все их знания о Руби это несколько антирельсовых статей с хабра. Полагаю, сказывается природная восприимчивость русского менталитета без малейшей обработки складывать к себе в голову любую информацию из СМИ, насильно хоронить и страстно превозносить что-то, если кто-то так сказал.
>На девелопера руби / рельсы есть работа вообще? Есть, много.
>Для автоматизации тестирования связка руби/капибара/гем на page object актуальна, или эта ниша тоже загнулась к хуям? Актуальна, но нишей это не никогда не называлось.
>>912942 Поясню. Я тестировщик. Года три назад щупал руби когда только вкатывался в автоматизацию, но по итогу меня взяли на проект с имеющейся базой, и пришлось осваивать жабу. Сейчас меня малёх подзаебала жизнь, и я пошёл искать другой участи на галере. Пока фронт работ ограничивается ручной работой (хотя весьма интересной) пушто я один на проекте, а новые фичи выкатывают со скоростью света, тут бы новое тестить успевать. Но уже в ближайшем будущем появится пару макак рангом пониже, которым на откуп можно будет отдать новоиспекаемое говно, а самому заавтоматить функциональщину. И тут мне вспоминаются зелёные дни, и каким удивительно простым и логичным казался руби, но... Чёт не хочется угробить время на разбор чего-то, что не апдейтится N лет, с мёртвым сообществом и логикой через жопу, а именно на это намекают вот такие вот самоплодящиеся слухи вроде того, что ты привёл.
>>912947 Самые сильные места и сама идея Руби в том, что его логика максимально удалена от жопы, а коммьюнити одно из самых сильных, пусть и не больших. Его слабое место в другом и прямо следует из вышесказанного: у него медленный интерпретатор и громоздкая архитектура(с точки зрения машины). Может быть даже самый медленный. ПейПэл перешли с рельс на ноду не потому что Руби умер, а потому что кто-то схавал "актуальную" технологию не подумав, что для высоких нагрузок она решительно не подходит. Первое, что делают начинающие рубисты когда собирают свой клон твиттера -- пишут тесты. Для тестов он подходит лучше чем что-то еще, если скорость не критична. А какие для твоих целей есть альтернативы?
>>912934 Интересный вопрос, на который очередной фелосаф-рубисектант ответит "да". Но ирл, можно сказать на 100% - руби (именно руби) - это мертворождённый язык. Он слишком сложен для решения любой нетривиальной задачи, содержит слишком много синтаксического сахара, и главное - в нём нет ничего феноменально нового. Рельсы - это хороший фреймворк, который таки родился, но к сожалению умер. Всё дело в несоответствии концепций и целей. Либерахи и хипстерьё отчаянно пиарили этот рор везде, где только можно - предполагая, что он найдёт свою нищу в больших и сурьёзных тырпрайз-приложениях, конкурируя с громоздкими жабами и шарпами. Но опять же - принципиально новых концепций не вышло, так что слишком сурьёзные и суровые тырпрайз-боссы не рискнули давать бабла на переписывание. Так рельсы стали конкурентом пхп - где бодро соснули хуец, ибо пхп-макакинг сильно ниже по рейтам, и на слуху у заказчиков - а пхп тырпрайз, опять же, не рискнул. Работы по руби нет - а если и есть, то "знание пхп", чтобы в один момент смог перепилить своё говно на него.
>>911277 Директор, у нас компания небольшая. Он когда в силиконовую долину летал наш стартап представлять, говорил что на эту хрень будут смотреть. Но раз все на него (всмысле на линкедин) сейчас болт положили, значит не особо то и нужен. Если есть какие скиллы - регайся, но так наверно всем похуй. Больше репозиторий важен и владение какими-нибудь современными йобами.
>>912985 >Больше репозиторий важен и владение какими-нибудь современными йобами. Но это ведь не про профиль в сети сам по себе. СрекедИн он же про коммуникацию. Лично мне очень понравилась идея "перманентного поиска" работы. Ты там присутствуешь, и потенциальный работодатель или партнер может найти тебя в любой момент, а не тогда, когда тебе приспичило и пошел размещать резюме на хедхантере. Это очень здорово (если это работает), потому что смена места работы всегда вынужденная и всегда компромисс и стресс. Охуенно, если действительно работа сможет сама меня находить, а не я ее что было бы справделиво.
Вот только не знаю, насколько это работает у нас в стране.
>>912955 Тогда это скорее всего вопрос скорости против архитектуры. На Руби это можно сделать архитектурно красивее, хотя это и по-своему субъективно. Если ты испытываешь к нему некую симпатию и предрасположенность, то смело бери его. Он не умер и жив не меньше, чем раньше. Другое дело, что его плюсы при строго техническом сравнении мягко говоря не очевидны.
>>912963 >Он слишком сложен для решения любой нетривиальной задачи Чем сложен?
> содержит слишком много синтаксического сахара А сколько должно быть, где по-твоему граница?
> в нём нет ничего феноменально нового. А в чем есть?
>Всё дело в несоответствии концепций и целей >свою нищу в больших и сурьёзных тырпрайз-приложениях, конкурируя с громоздкими жабами и шарпами. Тырпрайз это всегда основательный подход к проектированию, строгие спецификации еще до начала разработки и высокие нагрузки. Масштабирование вертикальное, а не горизонтальное. Только идиот может считать, что Руби когда-то на это претендовал.
>Так рельсы стали конкурентом пхп К этому момента стало очевидно, насколько твое виденье вопроса далеко от реальности. На Руби кто-то пытался сделать Вордпресс или Битрикс?
У Руби своя ниша, которая даже близко не пересекается с пхп или шарпами. Это ниша, которую принято ассоциировать со стартапами. Горизонтальное масштабирование, быстрая и гибкая разработка. И то, что многие проекты с Руби потом переписываются это не оскорбление в его сторону и знак, что он умер. Это инструмент, который отлично справляется с тем, для чего он предназначен.
>>913136 >И то, что многие проекты с Руби потом переписываются это не оскорбление в его сторону и знак, что он умер. А кто это делает вообще? Твиттер и гитхаб? Их по пальцам пересчитать. В основном никто ничего не переписывает, потому что, как правило, нет таких нагрузок, чтобы это было целесообразным.
>>913136 Няша, спасибо за твои посты, очень подбадривает. Меня подзаебали вскукареки про УМИРАНИЕ, ведь индексы только растут, рельсы развиваются и вакансии (хоть и немного в моей украшке), но есть. Волнуюсь, что сложно будет пристроиться джуниором, но опять же, вакансии иногда проскакивают, да и к весне уже портфолио норм будет. В общем, спасибо, пиши еще.
>>913381 Пока что 2 проекта: 1. обычный "новостной" сайт о колонизации марса и о космосе в целом, но где будет одна красивая страничка интерактивная о mars one и spaceX. возможна регистрация, заполнения профиля няшными бейджиками прнадлежности. пока что накидал только каркас, регу, бд новостей и почтовую рассылку. с одной стороны вроде как-то всратая хуйня выходит, с другой вроде всё норм и используются все основные action'ы и гемы, мб еще чат на кабеле прикрутить 2. Декбилдер для одной онлайн карточной игры, пока что готов только парсер сайта игры на карты и занесение их всех в бд (и вывод) 3. ну и надо бы сделать какой-нибудь няшный сайт-портфолио-резюме. у меня еще есть реальные два сайта, но они на пхп и там в основном я занимался фронтом и занесением информации по просьбе заказчика
Как переопределить root_path для залогиненных пользователей в пятых рельса? authenticated :user do root 'welcome#index', as: 'authenticated_root' end это в 5 рельсах не работает гем devise конечно же
>>913823 я сделал специальный контроллер для root_path, пусть будет welcome контроллер. В нем определен метод index. соответственно, зайдя на домашнюю страницу, редирект идет на welcome#index НО, если юзер логинится со страницы users/sign_in , то его должно редиректить на другой на друго контроллерб допустим, documents#index
Аноны, вот эти гвард тесты из хартла годнота? Ими пользуются? Вроде годнота, машина тебе сама тестики после каждого изменения запускает, но просто нехочется сейчас тратить время разбиратся, а потом обранужить какой-нибудь фундаментальный недостаток времени нет
>>913920 Ну, во-первых, многие действительно пропускают тесты при прохождении этого туториала, т.к. оверлоад инфой получается. Во-вторых, конкретно разработка через тестировку сейчас сдает позиции. Есть много спекуляций, что это хуйня. В третьих, в мире Рельсов чаще пользуются неMinitest, который показывает Хартл, а Rspec.
Однако, тестирование нужно, полезно и тесты сами по себе в больших проектах необходимы. Если ты серьезно нацелен стать рубирельс-джуном, то придется учить.
>>913927 >Во-вторых, конкретно разработка через тестировку сейчас сдает позиции. Есть много спекуляций, что это хуйня. Ну не знаю, с одной стороны действительно не очень удобно сразу думать над тестами, но с другой это позволяет тестировать без лишних ручных манипуляций. Для себя я нашёл оптимальный вариант: пишу небольшой кусок кода, когда приходит время проверить как это работает - покрываю его тестом вместо того, чтобы тыкать вручную. Если happy path проходит, проверяю всё живьём. Потом уже добавляю всякие корнеркейсы и unhappy path. А вы как делаете, анонасы?
>>913377 Да не за что. Не забывай, что впереди тебя ждет хардкорный путь и у тебя есть свой шанс облажаться со сроками. Задача все-таки вполне амбициозная. Желаю успехов, заходи еще, спрашивай.
Все Рубисты быстро смиряются с отсутствием литературы на русском и осваивают английский, а после этого уже точно не возвращаются на хабр и куда-нибудь в руби-паблики-вк. Работают вообще поголовно удаленно и укатываются сидеть с макбуками на Гавайи. Никаких тебе митапов и воркшопов в коворкингах. Отсюда и впечатление скудности коммьюнити: книжек нет, людей нет, упоминаний нет - еще и тренды пошли совершенно в другую сторону. хороним ООП, дрочим на ФП
Меж тем подошли свежие цифры о реальном положении дел. https://infinum.co/the-capsized-eight/analyzing-rubygems-stats-v2016 Не то что бы это большой повод для восторга, но по крайней мере сомневающиеся будут чувствовать себя спокойнее. А хабрапидоры останутся хабрапидорами.
>>912963 Вообще руби без рельсы практически нигде не нужен. Рэйлс стал умирать после 13 года, с активным пиаром нод-макакинга на бэк/фронт-енде за еду и скорость выполнения. Параллельно большое число любителей с рубигайдом в хиленьких ручонках влилось на рынок, сильно обваливая прайсы и создавая очень плохую репутация фрейморку путем написания чудовищного кода и, следовательно, отправлением очередного говностартапа на помойку ит. Инвесторы просекли и продолжают сечь фишку и деньги на такие проекты дают все реже и реже.
>>914104 > Работают вообще поголовно удаленно и укатываются сидеть с макбуками на Гавайи. Взоржал с зазывалы. Ну-ка, пруфани видами, лол. Типичный держатель подвальной галеры с прыщавыми студнями "воспитывает" подрастающее поколение в пр.
>>914235 Разумный баланс между кэшем и интересной работой(читай, хотябы не унылой шаблониной, которую спустя пару месяцев делаешь с закрытыми глазами) Я на самом деле хз насчет го, но на двачах его форсяк как езык макак, этакая нода от империи зла гуглей
>>914239 Работы интересной не бывает. Чтобы решать сложные задачи, нужно много учиться и практиковаться, где-то здесь со временем интерес пропадает. Ты проиграл. >>914240 Писать на руби, жить с мамкой.
>>914239 Голанг не плох, лучшее из лимбо без костылей си. Но в рашке и аутсорсе не приживется, потому что не веб. А это значит мало заказов и значит галерам нет смысла набирать гребцов.
>>914211 Ну, я например не на Гавайях только потому, что нафиг не упало. Мне не 20 лет, чтобы тратить бабки направо-налево. А так все успешные пацаны теперь, кто со мной начинал.
>>914249 Я понял, что не отказ. Просто интересно - как писать, если сначала ты хуяришь код без разбору от и до (хуже всего если проверяешь вручную при этом), потом полностью пытаешься написать на это всё тесты, потом они фейлятся, и ты долго и нудно расставляешь везде точки останова, шаришь по переменным, вот это всё, да? Потом находишь какую-нибудь, не относящуюся к конкретному тесту, ошибку, потому что пока хуярил - всё усложнилось и ты потерял из вида какую-то деталь. Мне кажется, если не всё напропалую за раз тестить, а помаленьку - на дебаг времени меньше тратится. Хотя возможно для кого-то медленным окажется прыгать туда-сюда из тестов в код и обратно.
>>914253 Тебе бы начать в шеколадный глаз давать и фалафель сосать. Глядишь и тесты пройдут и кофаундер приголубит.
(Автор этого поста был предупрежден.)
Антуаны. Есть одна вакансия: Требования: Уверенное знание: Ruby; Знание основ работы и разработки современных web-приложений (фоновые задачи, очереди сообщений, API); Понимание механизмов работы реляционных и noSQL БД (структура, нормализация, объединение, индексы); Знание: Ruby on Rails, PostgreSQL, CoffeScript, Sidekiq, Linux, Git Знание принципов Unit-тестирования и умение писать тесты с использованием rspec; Знание Unix на уровне пользователя командной строки Будет плюсом: Опыт работы с: Angular, Backbone, React Node JS; Знание алгоритмов и структур данных; TDD, TBD Знание других языков программирования.
И есть я - пару бложиков и реддитов на руби, с кодекадеми и прочим говном. Без опыта работы. Вопрос: Насколько велик шанс, что я соснул?
>>914302 Почти наверняка, но попытка не пытка. Игнорируй запрос резюме, оно сразу улетит на помойку повышая при этом показатели эйчарщицы вчерашней выпускницы провинциального вуза. Вместо этого надо найти все телефоны, звонить и запрашивать тестовое задание и по возможности разговор с кем-то из технического отдела.
Почему ActionCable нормально работает в девелопменте, а в продакшене нет? Браузер будто бы и не пытается проапгрейдить соединение.
В компилированном js разобраться невозможно, но такое чувство, что там не хватает куска кода. Или от чего это может быть? В cable.yml вместо редиса поставил везде async.
>>914418 Я бы попробовал отключить часть модулей компиляции до минимальной читаемости и попытался проследить до дыры в коде. Какая там в целом компиляция? Склейка в один файл и аглифай? Если так, то соответственно аглифай убрать и смотреть что получится.
>>914448 Поделись потом, что получилось. Самому до сих пор с ЭкшнКейблом не приходилось иметь дела, но обязательно нужно освоить, 2к17 же. Какие вообще ощущения от работы с ним?
>>914452 Я юный вкатывальщик, это (рор) мой первый фреймворк, так что думаю тебе не интересны мои ощущения. (А вообще всё очень просто, как и всё остальное в рельсах)
Действительно, углифаер проебывает куда-то кусок кода, ответственный за подписку, но пока я не могу включить углифаер обратно, лол. Вроде удаляю ассеты, компилирую снова, а в браузере всё так же. Походу у браузера в кеше остались, как у него их почистить?
>>914470 Мозилла. Кеш удалил, проблема не в нем, руками проверил файл в public/assets -- почему-то не прикручивается углифаер обратно. Вроде как я только одну строку менял в production.rb.
>>914473 Тут опять таки трудно что-то насоветовать не зная всей последовательности действий и остального контекста. Разве что напомню, трудно сделать большее что всегда можно откатить все изменения в гите и повторить все шаги более внимательно и осознанно. Я в половине случаев именно так нахожу выход.
Ничего не понимаю, если config.assets.compile = true, то углифаер замечательно работает, но assets:precompile выдает результат без него. Алсо, в первом случае ВНЕЗАПНО заработал акшон кабель. Вообще ничего не понимаю. >>914495 Пожалуй, и правда, сделаю как ты советуешь.
>>914627 Вот да, слышал похожие отзывы и что рельсо-звезды из Злых Марсиан именно поэтому сделали свой AnyCable как более человеческую альтернативу.
При всем моем Руби-оптимизме не могу не отметить, что сами Рельсы не очень хорошо адаптируются к современной разработке. Минитест - меняем на Рспек, Экшнкейбл - на Эникейбл, Спрокетс под нужны современного JS без Вебпака не подстраивается, Кофескрипт тоже отдельная история. И что удивительно, коммьюнити под все это так быстро и ловко подстраивается, что не успеваешь ощутить дискомфорта от неудачных решений DHH.
Сап сосач, ситуация очень тяжелая, нуждаюсь в любой хелпе. В в общем делаю веб-парсер сайта, всё шло гладко, пока я не наткнулся на выпадающий список..
Как спарсить названия из списка, и ссылки на картинки, соответствующие выбору? (curb/nokogiri/xpath)
Аноны, нужна помощь. Есть такой тест: http://pastebin.com/APJC3Qib Есть следующие моменты: 1)FactoryGirl все создает в дб, я провеляб byebug'ом 2)Эта сраница налокалке все рендерит, то есть присутствуют все нужные атрибуты, в том числе и name 3) Тест выдает ошибки, причем и в случаем с просты RSpec'om, так и с shoulda-matchers версией
Принимаются изменения в шапку треда в виде пулл-реквестов:
https://github.com/meoweg/2ch-pr-ruby
Как показывать код:
Быстро - https://pastebin.com
С исполнением - https://ideone.com
Требуется аккаунт GitHub - https://gist.github.com
Конференция
https://2chpr.slack.com/messages/ruby/
Получить приглашение: https://invite-me-to-2chpr.herokuapp.com/
FAQ:
1. C чего мне начать, чтобы стать рубистом?
Отличным началом будет Programming Ruby (The Pragmatic Programmers Guide), читать Eloquent Ruby и The Well Grounded Rubyist после прочтения первой толку особо не даст, одни и теже вещи, дальше читаем Ruby Way, затем познаем метапрограммирование с Metaprogramming Ruby. А дальше открываем Ruby cookbook 2015 года, Пишем свой код во время чтения.
Следующий уровень, продвинутые книги по руби:
Confident Ruby by Avdi Grimm
Practical Object-Oriented Design in Ruby
Refactoring Ruby Edition
Ruby Under a Microscope для любителей залезть под капот.
Документация по стандартным библиотекам http://ruby-doc.org/
Можно пройти руби онлайн - http://tryruby.org/levels/1/challenges/0
И ещё раз онлайн: http://www.codewars.com/?language=ruby
Не веришь в свои силы? Прочитал уже книжек много и силы свои хочешь познать, сделай - http://rubykoans.com
И вот еще https://rubymonk.com/ - Матц одобряет.
2. Какой gem посмотреть, чтобы понять, как писать код?
Лучше всего посмотреть небольшие gem'ы вроде cancancan, pundit, camping.
А еще можешь полистать на гитхабе гемы с нарастающей популярностю.
https://github.com/trending?l=ruby
Там еще нет тысяч строк, и тебе будет легче понять.
3. Есть ли GUI для руби?
Да. Есть обвязки к Qt, GTK, wxWidgets, Shoes, fxruby (одобренный).
4. Можно ли писать на руби мобильное ПО?
Да. Для iOS есть RubyMotion терпимого качества, для Android - лагающий и падающий, но всеми силами развивающийся ruboto. Для WinPhone до сих пор ничего не завезли.
5. Как установить разные версии рубей?
Легко и просто: https://github.com/sstephenson/rbenv
И это тоже, легко и просто: https://rvm.io
6. Что почитать по рельсам?
http://guides.rubyonrails.org
http://ruby.railstutorial.org
API: http://api.rubyonrails.org
Прекрасные туториалы в стиле for dummies - http://www.theodinproject.com/ruby-on-rails , а вот тут все тоже, но на русском http://codenamecrud.ru/
Классический вводный туториал, где делается с нуля клон твиттера, для новичков в rails самое то - https://www.railstutorial.org/book
Для дотошных читателей есть The Rails 4 Way.
7. Хорошие практики по руби и рельсам?
Читаем Rails AntiPatterns, смотрим Rails Best Practices, также неплохо посмотреть Rails Recipes.
Почитайте еще Grimm A. - Objects on Rails
Еще продвинутое чтиво - http://tutorials.jumpstartlab.com/
8. Ruby/Rails блоги, рассылки и твитторы
IRC каналы на FreeNode: #ruby, #ruby-core, #RubyOnRails, #rails (не очень активен).
Твитторы @rails, @dhh, @yukihiro_matz, @wycats, @tenderlove
Рассылки ruby-core, rails-core, rails-talk
Подкасты:
- http://rubyrogues.com
- http://ruby5.envylabs.com
Скринкасты:
- http://railscasts.com
- https://peepcode.com
- https://www.destroyallsoftware.com
- http://railsforzombies.com
Блоги:
- rubyflow.com - каждый день новости, новые библиотеки, обновления, все дела.
- rubysource.com - читаем интервью, хорошие практики, и безумные сравнения упоротого дибила-индуса на самом деле их пропускаем
- rubyinside.com - новости, туториалы.
- rubyweekly.com
- http://37signals.com/svn
- http://yehudakatz.com
- http://afreshcup.com
9. Я не могу в английский, что делать, анон?
Идти учить английский, без него тут делать нечего.
10. Есть ли у руби русское коммьюнити?
Нет. Вернее есть, но оно протухло и там полно людей у которых чсв высоко.
Яркий пример - [email protected]
А еще есть русская слак конфа - https://russiandevs.slack.com она общая, но есть очень активный руби канал.
Так же русская гугл группа, активная - https://groups.google.com/forum/#!forum/ror2ru
Еще вот - https://onrails.club/
11. Какие гемы стоит знать?
capybara, rack, rspec, devise, cancancan, simple_form, solr, sinatra, тысячи их.
Поиск гемов https://www.ruby-toolbox.com
12. Зачем нужны тесты и как их писать?
http://rusrails.ru/a-guide-to-testing-rails-applications
http://habrahabr.ru/post/163597/
Вместо этого можно прочитать классную книгу Everyday Rails Testing
13. Где можно задать глупые и не очень вопросы?
- здесь
- stackoverflow.com
- тематические slack-конфы
- а вообще, гугли, с вероятностью в 90% ответ на твой вопрос уже висит на stackoverflow.
14. Как фокнуть\сделать фичу\исправить баг, сложно ли это?
Нет, не сложно. На rubyflow появляется много новостей с реализацией новой библиотеки, вы можете сделать тесты, фичу для него, старые либы также обрастают багами, улучшайте их! пишите код.
15. В чём писать код?
Atom, Brackets, Sublime Text, TextMate, Vim, GNU Emacs. Для особо упоротых энтерпрайз-макак есть rubymine, плагины к эклипс и нетбинс.
16. Можно ли писать на руби с под windows?
Можно, но придется обрасти костылями в виде виртуальной машины, придется сходу разбираться с Vagrant и многим другим. Чем дальше ты продвигаешься, тем ближе становится ясно, что пора перекатываться на linux/mac
17. Руби язык одного фреймворка?
Есть еще Sinatra, Hanami (ранее Lotus), Volt, Grape, отличные штуки для DevOps - Chef, Puppet и годные генераторы для бложиков - Jekyll, Middleman, всё это активно используется в продакшене
18. Можно ли делать игры на Ruby?
Можно, но не нужно. Гем Gosu.
19. Ютуб каналы
Youtube driven development...
Вот тебе пара каналов, но никому не говори что учишься по видео.
https://www.youtube.com/channel/UCIQmhQxCvLHRr3Beku77tww/videos
https://www.youtube.com/channel/UCfWZwsP8trUy5uHJg8gcGIQ
https://www.youtube.com/channel/UCSI77lJlzlCFPLdV1RSAoYQ
https://www.youtube.com/channel/UCPIyDzf1vwWc8EQJGUX-vYw - тут на ру$$ком даже.
20. Как и где искать работу?
Легко и просто - http://rubyjobs.ru/
Не так просто - https://upwork.com/
Еще вконтакте есть группы по руби/рельсам, там иногда постят вакансии. Еще в русской гугл группе постят вакансии. Новичку будет сложно, но возможно.
TODO лист для ньюфагов:
И так, ты поставил руби, уже сгенерировал свой первый проект rails new pidaras
Начни уже с платинового пути, блог >> клон твиттера >> своя имейджборда >> свой гем >> дальше сам придумаешь.
Рекомендации:
1. Для блога, создать роли, Админ, Пользователь (можно использовать паттерн form object). Прикрутить лайки, комментарии.
2. По твиттеру, следуя гайду Хартла, пиши все то что он предлагает в качестве доп. заданий, например оповещение по нику (@eblan: привет)
3. По имиджборде: воссоздать по возможности полный функционал, в этом случае придется ознакомится с javascript/jquery/coffeescript, но тебе так или иначе придется. Еще хорошей фичей будет использование background job и крон тасков (sidekiq, whenever), чтобы заполнять свою борду тредами и постами с другой борды, можно использовать api двача, чтобы вытягивать треды и посты - https://github.com/ID25/api_2ch
4. Не стесняемся постить свои репозитории, наши эксперты с радостью отревьювят вас.
После этого тебе будут нужны паттерны, без них твой код превратится в говно. Один из часто используемых - Service Object.
https://netguru.co/blog/service-objects-in-rails-will-help - о сервисах
Еще паттернов - https://robots.thoughtbot.com/back-to-basics-solid
Но самый читаемый код, как и следовало ожидать, даёт функциональное программирование. Начни отсюда:
http://www.sitepoint.com/functional-programming-techniques-with-ruby-part-i/
http://www.sitepoint.com/functional-programming-techniques-with-ruby-part-ii/
http://www.sitepoint.com/functional-programming-techniques-with-ruby-part-iii/
http://www.sitepoint.com/functional-programming-pure-functions/
http://www.sitepoint.com/functional-programming-ruby-value-objects/
Только не переборщи. Руби - не функциональный язык, и иногда такой код может работать медленней.
Прочитал? Теперь рефактори то, что уже написал. И не забывай покрывать тестами.
Хорошим финалом будет деплой, это пожалуй самое болезненное, и ничего общего с деплоем на heroku, где тыц тыц и готово. Придется поковыряться со смежными вещами и узнать много нового, уже устоявшийся гем для таких дел - Capistrano.
Не забывайте спрашивать у анонасов вопросы, код лучше показывать через gist или pastebin с подсветочкой.
Ну, а мы открываем очередной Ruby Thread.