Ответы пользователя по тегу Ruby on Rails
  • Как повторно вызывать функцию из application.js?

    @bmalets
    (function ($) { 
      var delay = (function(){
        var timer = 0;
        return function(callback, ms){
          clearTimeout (timer);
          timer = setTimeout(callback, ms);
        };
      })();
    
      $('input').keyup(function() {
          delay(function(){
            alert('here should be search method!');
          }, 1000 );
      });
    })(jQuery);


    Когда пользователь что-то печатает в "input", каждую секунду автоматически вызывается метод alert.
    Может такое вариант Вам подойдет лучше :)
    Ответ написан
  • Как расширить ассоциации has_and_belongs_to_many и has_many, что бы назначить функцию к одному объекту модели?

    @bmalets
    достаточно добавить Ваш метод:

    def test
        p 'Hello!'
    end


    в Вашу модель Spec

    Кстати нельзя так называть модель - возможны проблемы с тестами, если будете использовать Rspec.
    Не советую пробовать программировать на руби, пока не прочитали книжку о руби и гайд по рейлсам.
    Ответ написан
    Комментировать
  • Как реализовать регистрацию пользователя в Ruby on Rails?

    @bmalets
    Может Вы просто ссылки не нашли как вставить во вьюшки?))))
    вот так надо
    Ответ написан
    Комментировать
  • Как заставить команду в тесте rspec выполняться не дожидаясь завершения выполнения предыдущей команды?

    @bmalets
    Могу подсказать на счет нескольки вещей:

    1. для "распараллеливания" тестов parallel_tests, (а можно и просто написать рейк-таску, которая будет тесты запускать в разных tty). Также есть guard что бы загружать тестраном несколько процессоров, а не один
    2. оптимизация site_prizm, facory_firl, vcr и т.д.
    3. тестирование фронт-энда. Драйвер браузера, который Вы используете в смоук-тестах например,
    запускает браузер бегает по страницах - настройте его так, что бы он не подтягивал сss и картинки (только html и js)
    4. Вы перелогиниваитесь в систему before-хуком перед каждым it. Не надо так :)
    Просто переопределите метод, который убивает сессию после окончания каждого it так, что бы он ее не убивал.
    тогда не надо будет логиниться - это экономит море времени. Вот это мой пример, правда драйвер селениум (метод резет запускается после каждого степа, я просто его переопределил и закомментировал строки с удалением сессии):

    class Capybara::Selenium::Driver < Capybara::Driver::Base
      def reset!
        # Use instance variable directly so we avoid starting the browser just to reset the session
        if @browser
          begin
            #@browser.manage.delete_all_cookies <= cookie deletion is commented out!
          rescue Selenium::WebDriver::Error::UnhandledError => e
            # delete_all_cookies fails when we've previously gone
            # to about:blank, so we rescue this error and do nothing
            # instead.
          end
          @browser.navigate.to('about:blank')
        end
      end
    end
    Ответ написан
    1 комментарий
  • Как умело работать с Sidekiq и очередями?

    @bmalets
    Коротко про суть - в общем любой сайт должен возвращать страничку на клиент < 3 секунд. То есть рельсы должны быстро обработать запрос и вернуть ответ. Отправка почты или "работа с инстаграм" - довольно сложные для обработки задания, которые замедлят скорость HTTP-ответа. Если "тяжелую" часть работы отдать на sidekiq, то то этой проблемы не возникнет.

    Sidekiq использует Redis для хранения очередей.
    В папке /app/workers/ размещаешь нужные для тебя воркеры. Например:

    # app/workers/hard_worker.rb
    class HardWorker
      include Sidekiq::Worker
    
      def perform(name, count)
        puts 'Doing hard work'
      end
    end

    (метод перформ как точка входа нужен обезательно, название файла и класса должны заканчиваться на 'worker', ну и конечно же include Sidekiq::Worker тоже нужно).

    Когда sidekiq запущен, можешь из любой точки в коде проекта вызывать:

    HardWorker.perform_async('bob', 5)

    Что создаст новое "задание" для sidekiq и добавит его в очередь. Собственно, по мере обработки job-ов sidekiq выполнит поставленое ему задание - достанет его из очереди и воркер его выполнит. Больше воркеров - быстрее обработка, количество воркеров можна задать как аргумент при запуске sidekiq.

    P.S. Скорее всего ты сделал ошибку в воркере или неправильно делаешь вызов. Добавь свой код к вопросу.
    + посмотри рейлскаты на эту тему railscasts.com/episodes/366-sidekiq
    Ответ написан
    5 комментариев