2012-01-24 10 views
11

Muszę uruchomić capybara-webkit wewnątrz aplikacji Rails, aby umożliwić bezgłowe przeglądanie stron internetowych przy pomocy JavaScript (tj. Nie dla celów testowania/CI, a webrat lub inne sterowniki/frameworki testów akceptacyjnych nie będą działały). Zastanawiam się, czy jest to możliwe w przypadku wdrożenia Heroku, szczególnie dlatego, że wymaga QtWebKit i możliwość rozwidlenia procesu webkit_server za pomocą komunikacji w gnieździe. Jestem otwarty na kreatywne pomysły, jak wykonać tę pracę na Heroku (na przykład puli robotycznych dynków). Mam nadzieję, że ktoś lepiej poradzi sobie z ograniczeniami istniejącymi w środowisku Heroku, lub może kategorycznie wykluczyć taką możliwość, aby w razie potrzeby móc przejść do AWS EC2.Czy jest możliwe uruchomienie capibara-webkit (np. Forked webkit_server) na Heroku Cedar?

Wyszukiwanie tego zjawiska ma tendencję do częstego pojawiania się w testach kapibara i dodatkach do serwerów CI, z których żadne nie są istotne dla mojego przypadku użycia. Nie testuję niczego (przynajmniej nie w tradycyjnym sensie ogórka/rspec/etc) - używam integracji Capybara ze sterownikiem, wyszukiwarką i modelem węzła/elementu, aby nawigować po stronie wymagającej znacznej ilości klientów. stronie JS w celu pracy.

Jestem również otwarty na inne rozwiązania (rdzenne Ruby) do programowego interakcji z witrynami internetowymi za pomocą DOM z obsługą JavaScript.

Odpowiedz

7

Rozmawiałem wsparcia Heroku na ten temat i ich odpowiedź była, że ​​jest to w zasadzie) nieobsługiwane; b) bardzo trudne, w tym (między innymi) statycznie zbudowana wersja QtWebKit.

Moje własne dochodzenie w tej sprawie na Amazon EC2 również uświadomiło mi, że QtWebKit wymaga działającej instancji Xvfb. Bardzo wątpię, czy byłby dostępny na Heroku, i podejrzewam, że byłoby to niezwykle trudne.

Moje własne podejście polega na umieszczeniu tej funkcji w instancji EC2. Po kilku próbach ze standardowymi AMI Amazona (ich kompilacja i RHEL) odkryłem, że pakiety dostępne za pośrednictwem systemów zarządzania pakietami Ubuntu sprawiły, że DUŻO łatwiej było zacząć działać.

Krótka historia: Heroku nie jest uruchamiany, Amazon EC2 z Ubuntu to najlepszy sposób na przejście.

2

Możesz być w stanie osiągnąć to, czego chcesz, używając PhantomJS.

Ten projekt ma JavaScript, a nie Ruby API, chociaż instancja przeglądarki może narazić serwer WWW, umożliwiając komunikację z nim z Ruby przez HTTP.

http://code.google.com/p/phantomjs/wiki/Interface

+1

Klejnot poltergeist dostarcza API Rubinowego do PhantomJS – subelsky

+0

Wygląda na to, że Capybara/Phantomjs/Poltergeist nie działa na Heroku. Bilet jest zamknięty, więc prawdopodobnie nie nastąpi to w najbliższym czasie. https: // github.com/jonleighton/poltergeist/issues/194 –

5

udało mi się z powodzeniem uruchomić Kapibara + Duch + PhantomJS na Heroku

umieściłem skompilowane pliki binarne dla OSX phantomjs (na moim komputerze deweloperskim) oraz linux-64 (dla Heroku) w folderze bin/My Aplikacja Rails.

inicjalizatory/capybara.rb

require 'capybara/poltergeist' 

Capybara.register_driver :poltergeist do |app| 
    phantomjs_path = if RUBY_PLATFORM['x86_64-darwin'] 
        Rails.root.join('bin', 'phantomjs-osx').to_s 
        elsif RUBY_PLATFORM['x86_64-linux'] 
        Rails.root.join('bin', 'phantomjs-linux-64').to_s 
        else 
        raise "Can't load PhantomJS for OS: #{RUBY_PLATFORM}" 
        end 

    options = { 
     phantomjs: phantomjs_path, 
     phantomjs_logger: Logger.new('/dev/null'), 
     phantomjs_options: %w[--load-images=no --ignore-ssl-errors=yes], 
     js_errors: false, 
     timeout: 90 
    } 
    Capybara::Poltergeist::Driver.new(app, options) 
end 

Capybara.default_driver = :poltergeist 
Capybara.javascript_driver = :poltergeist 
Capybara.default_wait_time = 1 

Przykładowy kod:

session ||= Capybara::Session.new(:poltergeist) 
session.visit('http://google.com') 

powodzenia!

+0

Rzeczy muszą się zmienić od 2015 r. - Teraz zamiast włączać binaria do bin można użyć gem phantomjs, a następnie utworzyć 'phantomjs_path' =' Phantomjs.path.to_s' – MingMan

Powiązane problemy