시나 경로 내에서 작동하지 않습니다 그러나 브라우저에서 '/'를 방문하면 다음과 같은 오류 메시지가 나타납니다.헤드리스 작업은 내가 머리가없는 파이어 폭스 브라우저를 시작합니다 <code>headless</code> 및 <code>selenium-webdriver</code> 보석을 사용하고
get '/' do
driver.navigate.to("http://google.com")
erb :root
end
*** Errno::ECONNREFUSED Exception: Failed to open TCP connection to 127.0.0.1:7055 (Connection refused - connect(2) for "127.0.0.1" port 7055)
그래서 저는는 파이어 폭스 인스턴스에 연결할 수 있으며, driver.navigate
은 머리가없는 범위에서 호출되고 있지 않기 때문에이 꽤 확신 다음과 같이오류입니다.
모듈 식 sinatra 스타일을 사용해 보았지만 동일한 오류가 발생했습니다. 내가 별도의 스크립트에서 헤드리스 서버를 분리되는 일을 결국 무엇
해결
. 이 스크립트는 loop
을 가지며 입력을 받으면 헤드리스 범위에서 명령을 실행 한 출력을 인쇄합니다. 그럼 sinatra 서버에서, 나는 PTY.spawn
을 사용하여 서버를 인스턴스화하고 stdin과 stdout을 전달하므로 Sinatra 앱에서 사용할 수 있습니다. 이 방법을 사용하면 헤드리스 스크립트가 한 번만 실행되므로 (여러 헤드리스 서버가 시작되지 않음) Sinatra 경로에서 연결할 수 있습니다. 헤드리스 스크립트의 변수 또는 메소드와 직접 상호 작용할 수 없습니다. 단지 I/O 만 사용해야합니다.
I합니다 (시나 응용 프로그램의 루트는 머리가없는 범위에서 호출 될 때)하지만, 원래의 코드가 작동하는 방법을 괜찮나 대답을 바라고
나는 제안을 감사하지만 머리가없는 범위에서 실행될 때는 Sinatra 서버에 연결할 수 없다. 이는 Nitrous의 코드가 실행되는 클라우드 환경에 관련된 문제 일 수 있습니다. 나는 다른 환경에서 시도해야 할 것이다. –
: (1 일 이내에이 댓글을 삭제할 것입니다.) – mudasobwa
멋지다. 제대로 작동했다. 'this = self'트릭을 사용할 필요가 없었습니다. 중요한 것은 헤드리스 브라우저를 한 번만 시작한다는 것입니다. sinatra route hit. 그래서 나는 별도의 클래스에서'start_headless'와'start_driver' 메소드를 만들었습니다. –