2014-10-24 41 views
6

Sto provando a distribuire un'app a Heroku che utilizza il web driver Watir. Funziona con successo localmente. Secondo le risposte a questa domanda: Can you deploy Watir on Heroku to generate HTML Snapshots? If so, how?, puoi farlo. Ho seguito i passaggi da questa risposta https://stackoverflow.com/a/21267376/3192470. Il mio app.rb assomiglia a questo:Applicazione Watir distribuita su heroku

require "sinatra" 
require "rubygems" 
require "shotgun" 
require "rake" 
require "watir" 

get '/sending_out' do 
    browser = Watir::Browser.new :phantomjs 
    erb :index 
end 

Ma si blocca quando schierato a Heroku con questi registri:

2014-10-24T13:01:10.620468+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/launcher.rb:32:in `launch' 
2014-10-24T13:01:10.620465+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/launcher.rb:35:in `block in launch' 
2014-10-24T13:01:10.620480+00:00 app[web.1]: credits.rb:44:in `rencredit' 
2014-10-24T13:01:10.620496+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1004:in `process_route' 
2014-10-24T13:01:10.620510+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `block in invoke' 
2014-10-24T13:01:10.620534+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:217:in `call' 
2014-10-24T13:01:10.620590+00:00 app[web.1]: /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service' 
2014-10-24T13:01:10.620460+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/binary.rb:60:in `execute' 
2014-10-24T13:01:10.620475+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/watir-webdriver-0.6.11/lib/watir-webdriver/browser.rb:46:in `initialize' 
2014-10-24T13:01:10.620491+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (2 levels) in route!' 
2014-10-24T13:01:10.620506+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `invoke' 
2014-10-24T13:01:10.620524+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in `call' 
2014-10-24T13:01:10.620587+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `call' 
2014-10-24T13:01:10.620469+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/bridge.rb:24:in `initialize' 
2014-10-24T13:01:10.620484+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `block in compile!' 
2014-10-24T13:01:10.620500+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:963:in `route!' 
2014-10-24T13:01:10.620525+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in `call' 
2014-10-24T13:01:10.620526+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call' 
2014-10-24T13:01:10.620528+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call' 
2014-10-24T13:01:10.620529+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in `call' 
2014-10-24T13:01:10.620574+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:2014:in `call' 
2014-10-24T13:01:10.621081+00:00 app[web.1]: ip-10-226-67-253.ec2.internal - - [24/Oct/2014:13:01:10 UTC] "POST /sending_out HTTP/1.1" 500 30 
2014-10-24T13:01:10.620462+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/binary.rb:34:in `start_with' 
2014-10-24T13:01:10.620477+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/watir-5.0.0/lib/watir/loader.rb:9:in `initialize' 
2014-10-24T13:01:10.620492+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1006:in `block in process_route' 
2014-10-24T13:01:10.620507+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1073:in `dispatch!' 
2014-10-24T13:01:10.620531+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-1.5.2/lib/rack/logger.rb:15:in `call' 
2014-10-24T13:01:10.620588+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service' 
2014-10-24T13:01:10.620459+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/binary.rb:127:in `path' 
2014-10-24T13:01:10.620474+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver.rb:67:in `for' 
2014-10-24T13:01:10.620490+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:985:in `route_eval' 
2014-10-24T13:01:10.620505+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `catch' 
2014-10-24T13:01:10.620517+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in `call' 
2014-10-24T13:01:10.620584+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `block in call' 
2014-10-24T13:01:10.620464+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/launcher.rb:70:in `start_silent_and_wait' 
2014-10-24T13:01:10.620479+00:00 app[web.1]: credits.rb:44:in `new' 
2014-10-24T13:01:10.620494+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1004:in `catch' 
2014-10-24T13:01:10.620509+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:898:in `block in call!' 
2014-10-24T13:01:10.620532+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-1.5.2/lib/rack/commonlogger.rb:33:in `call' 
2014-10-24T13:01:10.620586+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1788:in `synchronize' 
2014-10-24T13:01:10.620483+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `call' 
2014-10-24T13:01:10.620499+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:963:in `each' 
2014-10-24T13:01:10.620513+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `invoke' 
2014-10-24T13:01:10.620573+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:180:in `call' 
2014-10-24T13:01:10.620761+00:00 app[web.1]: 83.245.232.99 - - [24/Oct/2014 13:01:10] "POST /sending_out HTTP/1.1" 500 30 0.3206 
2014-10-24T13:01:10.620466+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/firefox/socket_lock.rb:20:in `locked' 
2014-10-24T13:01:10.620481+00:00 app[web.1]: credits.rb:36:in `block in <main>' 
2014-10-24T13:01:10.620497+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:964:in `block in route!' 
2014-10-24T13:01:10.620511+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `catch' 
2014-10-24T13:01:10.620535+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:210:in `call' 
2014-10-24T13:01:10.620592+00:00 app[web.1]: /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run' 
2014-10-24T13:01:10.620471+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/common/driver.rb:31:in `new' 
2014-10-24T13:01:10.620486+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `[]' 
2014-10-24T13:01:10.620502+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1076:in `block in dispatch!' 
2014-10-24T13:01:10.620514+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:898:in `call!' 
2014-10-24T13:01:10.620537+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-1.5.2/lib/rack/head.rb:11:in `call' 
2014-10-24T13:01:10.620593+00:00 app[web.1]: /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread' 
2014-10-24T13:01:10.620453+00:00 app[web.1]: Selenium::WebDriver::Error::WebDriverError - Could not find Firefox binary (os=linux). Make sure Firefox is installed or set the path manually with Selenium::WebDriver::Firefox::Binary.path=: 
2014-10-24T13:01:10.620472+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/common/driver.rb:31:in `for' 
2014-10-24T13:01:10.620487+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (3 levels) in route!' 
2014-10-24T13:01:10.620503+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `block in invoke' 
2014-10-24T13:01:10.620515+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:886:in `call' 
2014-10-24T13:01:10.620555+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/rack-1.5.2/lib/rack/methodoverride.rb:21:in `call' 
2014-10-24T13:01:10.621098+00:00 app[web.1]: http://sleepy-dawn-1804.herokuapp.com/ -> /sending_out 
2014-10-24T13:01:10.625080+00:00 heroku[router]: at=info method=POST path="/sending_out" host=sleepy-dawn-1804.herokuapp.com request_id=ab9957cb-f2af-416c-9055-8fe4d4ccae69 fwd="83.245.232.99" dyno=web.1 connect=1ms service=327ms status=500 bytes=326 
2014-10-24T13:19:46+00:00 heroku[slug-compiler]: Slug compilation started 
2014-10-24T13:19:56+00:00 heroku[slug-compiler]: Slug compilation finished 
2014-10-24T13:19:56.715255+00:00 heroku[api]: Deploy a3750e4 by ___ 
2014-10-24T13:19:56.715329+00:00 heroku[api]: Release v13 created by ___ 
2014-10-24T13:19:56.987774+00:00 heroku[web.1]: State changed from up to starting 
2014-10-24T13:19:59.188226+00:00 app[web.1]: == Sinatra has ended his set (crowd applauds) 
2014-10-24T13:19:59.372012+00:00 heroku[web.1]: Starting process with command `bundle exec ruby credits.rb -p 38378` 
2014-10-24T13:19:59.936031+00:00 app[web.1]: bash: bundle: command not found 
2014-10-24T13:19:58.792208+00:00 heroku[web.1]: Stopping all processes with SIGTERM 
2014-10-24T13:20:00.744914+00:00 heroku[web.1]: State changed from crashed to starting 
2014-10-24T13:20:00.744331+00:00 heroku[web.1]: State changed from starting to crashed 
2014-10-24T13:20:00.731432+00:00 heroku[web.1]: Process exited with status 127 
2014-10-24T13:20:00.979441+00:00 app[web.1]: [2014-10-24 13:20:00] INFO WEBrick::HTTPServer#start done. 
2014-10-24T13:20:00.979326+00:00 app[web.1]: [2014-10-24 13:20:00] INFO going to shutdown ... 
2014-10-24T13:20:01.793815+00:00 heroku[web.1]: Process exited with status 0 
2014-10-24T13:20:02.890977+00:00 heroku[web.1]: Starting process with command `bundle exec ruby credits.rb -p 8176` 
2014-10-24T13:20:03.432512+00:00 app[web.1]: bash: bundle: command not found 
2014-10-24T13:20:04.173800+00:00 heroku[web.1]: State changed from starting to crashed 
2014-10-24T13:20:04.164173+00:00 heroku[web.1]: Process exited with status 127 
2014-10-24T13:20:04.812284+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=sleepy-dawn-1804.herokuapp.com request_id=f0b2bb74-8eaa-4a4c-801f-97ab9d442f04 fwd="54.166.216.157" dyno= connect= service= status=503 bytes= 
2014-10-24T13:20:06.224767+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=POST path="/sending_out" host=sleepy-dawn-1804.herokuapp.com request_id=eb306448-91ee-40ea-89ec-7756e277e986 fwd="83.245.232.99" dyno= connect= service= status=503 bytes= 

E anche quando spingo a Heroku che pensa che sia un'applicazione phantomjs:

PhantomJS app detected 

Cosa si può fare per tutto questo? È possibile eseguire Watir da Heroku?

EDIT: risposta da supporto Heroku:

Watir richiede selenio, che richiede un server X installato sulla macchina. Poiché i nostri dynos non sono progettati per avviare applicazioni grafiche, non hanno installato alcun server X e pertanto non possono installare Selenium. Pertanto, temo che non sarà possibile utilizzare Watir nella tua applicazione.

+0

fai a sapere se si potrebbe lavorare se si esegue watir del browser senza testa? –

+0

@DavidGeismar, vuoi dire con la gemma senza testa? Ho eseguito con successo watir con gemma senza testa su vps senza testa, ma non heroku. Penso che sì, puoi farlo anche su heroku con qualche altro buildpack. – lakesare

+0

Non sto usando la gemma senza testa, ma finalmente con il driver fantasma fantasma, ma non riesco ancora a implementarlo su heroku ... Se hai qualche idea per aiutarmi http: // StackOverflow.it/questions/33156381/cant-deploy-rails-app-on-heroku-after-installation-buildpacks –

risposta

5

Sì, è possibile! Segui i passaggi di questo articolo: https://github.com/edelpero/watir-examples/blob/master/watir_on_heroku.md.

Poco:

$ heroku config:set BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git 
$ touch .buildpacks 

Quindi aggiungere alla directory appena creata .buildpacks queste righe:

https://github.com/heroku/heroku-buildpack-ruby 
https://github.com/stomita/heroku-buildpack-phantomjs 

Poi nel terminale:

$ heroku config:set PATH="/usr/local/bin:/usr/bin:/bin:/app/vendor/phantomjs/bin" 
$ heroku config:set LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/lib:/app/vendor/phantomjs/lib 

Spingere quindi queste modifiche Heroku e

Watir::Browser.new :phantomjs 

con il solito codice Watir seguente dovrebbe funzionare!

+0

Articolo interessante. Heroku consente più pacchetti di build dalla scatola con 'heroku buildpacks: aggiungi --index 1 heroku/ruby'. Ma nessuno dei webdriver funziona per me, producono qualcosa come "ChildProcess :: LaunchError - Nessun file o directory" che trascura i file esiste e ha + x su di essi. – lifecoder

1

heroku-buildpack-multi è deprecato, al giorno d'oggi è possibile aggiungere più buildpacks di Heroku e utilizzare il phantomjs buildpack in questo modo:

$ heroku buildpacks:add https://github.com/stomita/heroku-buildpack-phantomjs 

dovrebbe funzionare!

Problemi correlati