Unicorn HTTP サーバーのインスタンスがサーバー上で実行されています。このディレクトリにいくつかのファイルをロードします。
~/apps/myapp/current/
このパスは、このパスの最後のリリースへのシンボリック リンクです。
~/apps/myapp/releases/234234532/
これは、デプロイ時に Capistrano によって構成されます。Unicorn が適切に再起動することを確認するために、最後に呼び出される deploy:restart タスクが deploy.rb に含まれている場合でも手動で行います。これは、Unicorn に対して Capistrano にいくつかの問題があることを読んだためです。
私のアプリは、Selenium WebDriver を使用して Selenium インスタンスを起動しようとしています。ただし、それが私の問題です.Seleniumは古いリリースを指しているようです。
確かに、プロセスの重要なファイルを削除することを選択しました。これは、アプリがまだ正常に起動するかどうか、およびそれが私が期待した本当に良いリリースであるかどうかを確認するためです. うまくいけば、私のアプリは起動せず、いくつかの論理エラーが表示されました.
だから今、私は良いリリースを指していると確信しています.Seleniumの動作を理解していません. 私は説明しています:
ログ内に表示されるエラーは次のとおりです。
invalid page structure: Unable to locate element: {"method":"id","selector":"sectionSearch"}
Command duration or timeout: 1.02 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.21.0', revision: '16552', time: '2012-04-11 19:08:38'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.13-grsec-xxxx-grs-ipv6-64', java.version: '1.7.0_147-icedtea'
Driver info: driver.version: EventFiringWebDriver (org.openqa.selenium.NoSuchElementException)
要約すると、SeleniumsectionSearch
は関連する HTML ページに欠落している id 要素に文句を言います。
したがって、この記事が示唆するように: http://seleniumhq.org/docs/04_webdriver_advanced.html、特定の html 要素が存在しないことを通知する前に、タイムアウトを増やしました。
wait {driver.find_element(:id, 'sectionSearch')}
参考までに、wait はカスタム メソッドです。
def wait(timeout = 50, &block)
Selenium::WebDriver::Wait.new(timeout: timeout).until(&block)
end
ローカル コンピューター (開発環境) では、おそらく別の SeleniumDriver: FirefoxDriver を使用しているために動作します。
def driver
@driver ||= begin
if Rails.env.production?
driver = Selenium::WebDriver.for :remote, url: 'http://localhost:4444/wd/hub'
else
driver = Selenium::WebDriver.for :firefox
end
driver.manage.timeouts.implicit_wait = 20
driver
end
end
しかし、ユニコーンを強制終了して再起動した後でも、サーバーで同じ問題が発生します。
invalid page structure: Unable to locate element: {"method":"id","selector":"sectionSearch"}
Command duration or timeout: 1.02 seconds
したがって、私の最後のアクションは、サーバーのアプリケーションの現在のフォルダー内で次の行を手動で変更することでした。
wait {driver.find_element(:id, 'sectionSearch')}
に
wait {driver.find_element(:id, 'sectionSearchhhhhhhh')}
今、私の期待は、Seleniumがこの欠落要素に文句を言うので、エラーは論理的です. なぜこれを行うのですか?Selenium が UPDTATED ソース ファイルを受け取ることを確認したいからです。
そして、そうではなかったようです...前のエラーと同じエラーが表示されます。
誰でもアイデアがありますか?