個人開発WebアプリのHippoMarks(クラウドブックマークサービス)開発時の話です。そのため、環境やファイル名は一般的なものではないので適宜置き換えが必要です。
ブックマークしたサイトのキャプチャを取ってくる機能があるのですが、本番環境で動いてない事象にあたった際のログです。
Bookmark.get_site_capture('https://blog.hippohack.me')
Traceback (most recent call last):
3: from (irb):1
2: from app/models/bookmark.rb:73:in `get_site_capture'
1: from app/models/concerns/capture.rb:21:in `get_screenshot'
Errno::ENOENT (No such file or directory - /app/.apt/usr/bin/google-chrome)
irb(main):002:0> exit
# which google-chrome
/usr/bin/google-chrome
パスがあってない。
オプションで設定できそうな。
options.binary = "/usr/bin/google-chrome"
ローカルでおなじことやったらhogeに値入る。
> hoge = Bookmark.get_site_capture('https://blog.hippohack.me')
Traceback (most recent call last):
1: from (irb):1
NameError (uninitialized constant Bookmark)
Did you mean? Bookmarks
irb(main):002:0> Traceback (most recent call last):
irb(main):003:0* 3: from (irb):1
Traceback (most recent call last):
SyntaxError ((irb):2: syntax error, unexpected ':', expecting end)
...ceback (most recent call last):
... ^
(irb):3: syntax error, unexpected ':', expecting end
3: from (irb):1
^
irb(main):004:0> 2: from app/models/bookmark.rb:73:in `get_site_capture'
irb(main):005:0` 1: from app/models/concerns/capture.rb:21:in `get_screenshot'
irb(main):006:0' Errno::ENOENT (No such file or directory - /app/.apt/usr/bin/google-chrome)
irb(main):007:0' irb(main):002:0> exit^C
irb(main):007:0> hoge
=> nil
うそ、バイナリの設定方法はこっちか?
ChromeOptions options = new ChromeOptions();
options.setBinary("/path/to/other/chrome/binary");
いやちがうなー
@webdriver_options = Selenium::WebDriver::Chrome::Options.new(binary: '/usr/bin/google-chrome')
これが正解ぽい。
けど、ローカルで成功、本番でエラー。 キャプチャ処理が走らない。
過去Herokuでテスト稼働させていたときの環境編集が残っていたのが問題でした。
[app.env]
WD_CHROME_PATH=/app/.apt/usr/bin/google-chrome
たぶんこれぽい。
WD_CHROME_PATH=/usr/bin/google-chrome
正解。
Heroku独自の環境変数かと思ってたけどそうでもないみたいです。 あと、WD_CHROME_PATH ってワードで検索すれば情報ありそうだったけど出会えませんでした。
とりま改善したぽいのでいいとします。
最後までお読みいただき、ありがとうございました。
ご意見などありましたら@hippohackへDMをお願いいたします。