• Как построить конвейер сайтов на Ruby On Rails? Подходит ли RoR вообще?

    Singaporian
    @Singaporian
    Так, давайте отделим мух от котлет.

    Задач я тут вижу две:
    1. Какую платформу использовать
    2. Как деплоить

    Причем вторая зависит от первой, поэтому решать надо в той же последовательности.

    Итак,
    1: Выборов три:
    1. a. Server lease (когда вы просто арендуете конкретный выделенный или виртуальный сервер у провайдера)
    2. b. IaaS (например, AWS EC2) - то же самое, что "1.a", но можно мгновенно создавать и удалять
    3. c. PaaS (например, AWS BeansTalk, OpenShift, CloudFoundry) - когда вы вообще абстрагированы от понятия "сервер" и оперируете понятиями "ресурс".

    Выбор тут основывается на вашем кошельке (чем ниже - тем дороже) и знаниях (чем ниже - тем проще).

    2: Пришло время деплоить.
    Если у вас PaaS, то вопрос деплоя хорошо покрыт в их инструкциях - и у каждого по своему.
    Если у вас сервер, то лучше деплоить докером (а точнее docker compose). Делается это следующим образом. Сначала разбиваете свой сервис на максимально атомарные микро-сервисы.
    Например, у вас получились: само приложение (RoR + sidekiq), PostgreSQL, Redis.
    Соответственно, вы делаете три контейнера. Все три контейнера вы описываете в в файле docker-compose.yml
    Но тут есть одно но. В то время, как PostgreSQL и Redis вы можете взять стандартные - и эти контейнеры уже готовы, то свой RoR вам нужно каждый раз доделывать. Ведь в нем могли измениться зависимости или что-то еще. Поэтому в docker-compose.yml вы один из контейнеров описываете со словом "build ." - это значит, что docker compose не будет пытаться его стягивать из интернета, а найдет файл Dockerfile и, согласно ему, построит имедж самостоятельно. А уже в этом имедже будет что-то типа:

    # Please keep same version as in Gemfile (https://hub.docker.com/r/library/ruby/)
    FROM ruby:2.3.4
    
    ENV RACK_ENV development
    
    COPY . /usr/share/website
    
    WORKDIR /usr/share/website
    RUN bundle install
    
    CMD ["/usr/share/website/run_rails.sh", "/usr/share/website"]


    В файле run_rails.sh будет что-то типа:
    #!/bin/bash
    
    cd $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
    export RACK_ENV=development
    export SECRET_KEY_BASE=266a11dc19acc67107064dfddcecb4187545a08b35bd9a847c7b53545be22dbd8d115036024fcfc659f5936ba4a5df9a7d2a937797fv9d7v9fv7v97e9f430ff
    
    bundle install
    
    bundle exec rake db:migrate db:seed
    bundle exec rake assets:precompile
    
    find /usr/local/bundle -name guard
    bundle exec foreman start --procfile Procfile.dev --port 8080


    А сам docker-compose.yml будет похож на:
    version: '3'
    
    services:
        pg:
            image: postgres:9.6
            environment:
                - PGDATA=/var/lib/postgresql/data
                - POSTGRES_DB=project_db_dev
                - POSTGRES_USER=project_user
                - POSTGRES_PASSWORD=project_password
            volumes:
                - ${PG_DATA_DIR}:/var/lib/postgresql
            ports:
                - 5432:5432
    
        rd:
            image: redis:4.0
            ports:
                - 6379:6379
    
        ws:
            build: .
            volumes:
                - .:/usr/share/website
            ports:
                - 8080:8080
            depends_on:
                - pg
                - rd

    Обратите внимание, что данные PostgreSQL находятся не на самом имедже - иначе их можно потерять при обновлении или удалении сервера.

    Вот и вся ваша проблема.
    Ответ написан
    Комментировать
  • Как построить конвейер сайтов на Ruby On Rails? Подходит ли RoR вообще?

    Matvey-Kuk
    @Matvey-Kuk
    Разработчик в Cisco, CA.
    Настраивал конвейер для полностью аналогичной компании пару лет назад. Единственное отличие - почти не было PHP наследия.

    За основу взял Django стек, т.к. он отлично подходил по количеству свободных профессионалов на рынке и тем, что в Django "всегда есть единственный очевидный путь как сделать что-либо правильно", тогда как в Node этих путей очень много и каждый новый нанятый программист должен чуть-чуть, да изменять свои подходы к разработке.

    Поначалу основной упор пришлось таки сделать на DevOps, все работало на GitLab, GitLab CI, Docker и хостинге Flops.ru. Это очень муторная, долгая работа по первичной настройке всего и вся. Не уверен, что её получится избежать.

    Разработка проекта велась следующим образом:
    1) Есть репозиторий с "заготовкой", копируется в новый репозиторий.
    2) Подключается GitLab CI, в переменных среды задается вся-вся конфигурация. Например, на каких серверах запускать, на каких доменах и так далее.
    3) Программисты выпинываются на прогулку по другим репозиториям в поисках удачных технических решений в похожих проектах.
    4) Пушат код, он заливается на сервачки. Каждая ветка - на свой поддомен, фичи тестятся отдельно. Кодревью, Юниттесты, Мерж реквесты - это все реально помогает.

    В итоге когда все завелось и начало помогать, а не делать больно (примерно через пол года), появилась другая проблема - как нам то же самое соорудить на фронтенде? А это уже совсем другая история...
    Ответ написан
    2 комментария
  • Актуальный, удобный и лучший css-фрэймворк на 2016 год?

    VladimirZhid
    @VladimirZhid
    Нравится делать что-то интересное и полезное.
    Bootstrap 4 тогда. А за, то что это Beta не волнуйтесь, если ручки есть, то всегда можно что-то подправить, это не JS или PHP фреймворк, а только CSS. LESS версия в помощь, вообще как по мне лучший вариант.
    Ответ написан
    3 комментария
  • Как можно отключить увеличение курсора при "тряске" в Mac OSX El Capitan?

    @AlexandrLight
    Отключается эта фишка и очень просто.
    Заходим в Универсальный доступ->Монитор->Shake mouse pointer to locate

    ->9fb69090f0d64b2cb2a0118e6d4633d0.png
    Ответ написан
    Комментировать
  • Есть книги по верстке, не основы css, а именно как верстать правильно?

    rsvetlitskiy
    @rsvetlitskiy
    UX/UI designer, researcher and almost a developer.
    Лучший способ, понять как верстать правильно, это посмотреть исходники общепризнанных решений, от опытных специалистов. Советую вам изучить код нескольких css-фреймворков, например Foundation и Bootstrap. Css код первого, на мой взгляд, практически эталон.
    Ответ написан
    2 комментария
  • Как набрать проекты для портфолио Full stack PHP developer?

    Bandicoot
    @Bandicoot
    Вась-программист
    Попробуйте удаленную работу, зачем обязательно фриланс? С вашими-то скиллами
    Ответ написан
    6 комментариев
  • В чем выражается удобство разработки на ROR?

    Jeiwan
    @Jeiwan
    Во-первых, Рельсы — это просто Руби. Все достоинства Рельс вытекают из достоинств Рубей. У Руби довольно хороший АПИ, в котором присутствуют решения для большинства программистских рутинных задач — это очень удобно.
    Во-вторых, Рельсы — это набор хорошо спроектированных гемов. Не нравится что-то? Можешь выкинуть или заменить. Никто не заставляет использовать все компоненты Рельс.
    В-третьих, Рельсы — это хороший пример возможностей ООП Рубей.
    В-четвертых, convention over configuration. Новички называют это магией, но для более-менее опытного руби-программиста в этом нет никакой магии. И благодаря этому подходу, опять же, удалось избавить программиста от постоянного рутинного выполнения одних и тех же, "операционных", задач. Другой пример, демонстрирующий этот принцип, — Backbone и Angular: в Бэкбоне нужно много рутинных задач решать (даже не решать, так как это примитивные задачи, а просто каждый раз прописывать их) самому, а в Англуяре эти задачи уже решены.
    В-пятых, Рельсы — вполне зрелый инструмент решения задач веб-разработки. Он уже давно вышел из хипстерской стадии, и вместе с этим ушло большое количество людей, которых привлекают только модные, находящиеся у всех на слуху, технологии. Рельсы (как и Руби) до сих пор развиваются и не собираются умирать.
    В-шестых, эстетика и лаконичность Руби. Лично я не вижу никакого смысла в излишних кавычка, скобках, точках с запятой. Не за чем визуально засорять код второстепенными элементами. Языки программирования постепенно становятся более социальными, более доступным людям — и это правильно.

    Но это всё дело вкуса, в большей степени. У вас уже сложилось свое видение языков программирования, вам теперь кажется, что отсутствие типов — это недостаток. Лично я считаю, что это неправильно. Это такая же ситуация, как когда ты начинаешь чем-то заниматься (играть на гитаре, например) и изначально делаешь что-то неправильно (постановка пальцев), то у тебя эта вредная привычка закрепляется и потом мешает дальше развиваться. Тебе трудно становится переучиться на другое, так как ты уже сильно привык к этому, неправильному, способу. Я не говорю о том, что строгая типизация это неправильно, нет, дело в другом. Есть разные парадигмы программирования, есть разные подходы к программированию, и хороший программист должен владеть ими (ну или стремиться к этому) и не ставить какой-то из них во главу угла. Главное, не какой язык, а что на нем можно делать, какие задачи решать.
    Ответ написан
    Комментировать
  • Как "самоорганизоваться" во времени?

    @Gems
    Пробовали хоть раз написать свою CMS? Попробуйте. Только некому её показывайте!

    Рекомендую попинать какой-нибудь простой фрейморк типа Kohana. Есть хорошая русская документация и на торрентах есть курсы от "ШП" по ней. Это я не к тому, что Kohana - наше все, но она на пальцах даст вам представление об MVC и как примерно работают современные PHP-фреймворки. Далее уже можете пробовать YII 2 и прочее, это другой уровень. Там веселее. А с "хеллоувордами" завязывайте.

    Учиться можно так: онлайн курсы в свободное время + pomodoro

    Курсов полно. Многие из них бесплатные.
    Ответ написан
    Комментировать
  • Бесплатный домен .tk +. Как с точки зрения seo оптимизации?

    Домены равнозначны, я устал повторять )) И бесплатные домены, на бесп. хостингах по 10 тыс. посетителей в сутки собирают.
    Ответ написан
    Комментировать
  • Почему могли пропасть превьюшки картинок на маке?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    В интернете пишут что надо почистить кеш finder'a. Посмотрите подробнее здесь Не отображаются превью файлов в Finder
    Ответ написан
    1 комментарий
  • Каким способом вы реализуете работу с городами?

    MintTea
    @MintTea
    Не пишу на RoR, но вот вам универсальный для любого mvc-фреймворка ответ:

    1) Создать таблицу в бд и соответствующую модель в приложении
    2) Заполнить таблицу городами. Список можно взять отсюда basicdata.ru
    3) В представлении прикрутить https://github.com/brianreavis/selectize.js/, например

    Что конкретно вас интересует?
    Ответ написан
    Комментировать
  • Почему на production не показываются некоторые картинки?

    @vsuhachev
    Чтобы картинки копировались в public при компиляции ассетов в config/application.rb добавьте:
    config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
    Ответ написан
    Комментировать
  • Как настроить Postgresql локально на ubuntu для развертывания на Heroku?

    @exvion Автор вопроса
    Решил проблему - переустановив postgresql, воспользовавшись инструкцией tutorials.jumpstartlab.com/topics/vagrant_setup.html и советом toster.ru/answer?answer_id=281953 от @Whats.
    Ответ написан
    Комментировать
  • Что спрашивают на позицию middle/senior php?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    Спрашивали на senior (всё, что удалось вспомнить):
    можно ли взломать ssl
    для чего нужны интерфейсы и абстрактные классы
    чем отличается сервисно-ориентированная разработка от доменно-ориентированной
    как сделать так, чтобы никто не смог угнать куки через джаваскрипт, как сделать чтобы нельзя было перехватить куки
    кроссдоменные запросы
    как добавить поле в высоконагруженную базу в таблицу на продакшене где 100 миллионов записей, без отказа бля базы
    что такое партиционирование, шардинг, репликация
    как работает http
    что такое rest и soap
    что такое репликация и как передаются данные при репликации между серверами, виды репликаций
    триггеры, процедуры в базе
    про способы кеширования веб приложений
    джоины в базе
    просили написать функцию нахождения ближайшего числа в массиве, для заданного числа
    что такое рефакторинг
    DIC, ServiceLocator
    Какие паттерны знаешь и т.д.
    Ответ написан
    29 комментариев
  • Как вернуть девственность MacOS?

    vasilyev
    @vasilyev
    php, 1c-bitrix
    Вот здесь описано, что стоит делать при продаже https://discussions.apple.com/thread/4390401
    Ответ написан
    Комментировать
  • Web-разработка под *nix: выбираем дистрибутив

    super
    @super
    Использую OS X для веб-разработки и очень доволен.
    Ответ написан
    8 комментариев