2020/02/24~2020/03/08のメモ

だいぶサボってた…

catalinaにjava sdkをインストールする

これが正解なのかわからないがbrewでいれた。

brew install java11
sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk

circleciのrubyイメージでmysql2 gemがうまく使えない

  • circleci/ruby:2.3.7-node-browsers
    • そもそもこれが古い
  • mysql2は0.5.2
  • インストールは成功するが、いざ使う段になって次のエラーがでる
    • LoadError: libmysqlclient.so.18: cannot open shared object file: No such file or directory - /home/circleci/repo/vendor/bundle/ruby/2.3.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.soになる
  • 原因はgemのキャッシュだった。Dockerのimageが変わるときにはgemのキャッシュをpurgeされるようにしておいたほうがいいのかも?

ruby - Sunspot/Solr: indexing a time field results in NumberFormatException - Stack Overflow

  • Dockerで用意したsolrがデフォルト設定なので、2gram前提で作っているテストがコケた

    • solrにschema設定してデータをpostする - Qiita
    • のようにRESTで設定を突っ込むとよいのかな
      • これはsolr6からっぽい(と思ったがdockerhubのsolr5系ではAPIがデフォルトになっていそう)
      • RESTで設定を投入できることを確認したが、そもそもデフォルトで用意されている設定とsunspotが想定している設定はかなり違いそうなので、xmlで用意してあげるのが良さそう
    • solrconfig.xmlの一部設定を変更することでschema.xmlを読みに行かせることができる
    • sunspotはsolr7系以上で使えるschema.xmlを用意している
    • ワンチャン使えるかな?と思ってsolr5.5で試してみたけどだめだったのでsolr7系を使うように変更した
    • Apache Solr設定メモ - Qiita
      • solrconfig、schema.xmlを使うためには7のやつにschema.xmlを使う設定を足すだけではだめだった
      • 不要な設定を↑を参考に削除した
  • Dockerfileを作って、developmentのとtestのcoreをbuild時に作るようにした

  • sunspot.ymlはERB使える模様

cp — Docker-docs-ja 17.06.Beta ドキュメント

dockerでscpみたいなのできるのかな…と思っていたが普通にできましたね…

docker pushのお作法

  • たまにしかやらないので忘れる。
  • imageとして willnet/hoge:1.0.0のような名前にしておく必要があった
  • docker tag 今の名前 新しい名前で新しいタグを作れる

CentOS7で実行ファイルの不足している依存関係を解消する(CentOS7でElectronが試せない話に関連して) - Qiita

  • yum whatprovides便利では
  • yum providesでも同じそう

Amazon LinuxでImageMagicK(Imagick)を使う | ハックノート

古い環境に古いimagemagickインストールバトルつらい…

RPMパッケージをインストール/アンインストールするには

↑でimagemagickyum経由でインストールするには、関連するrpmを都度インストールして依存関係を満たして上げる必要がありそう。めんどい

bundle installした古いバージョンのgemが参照されている

bundle -v
Bundler version 2.1.4
bundle clean

したら解消(当たり前だけど)した。gemコマンドもしくはbundlerかなあ…。

sidekiqでメール送信したときにエラーになってもsentryには通知したくない

  • どうせすぐリトライするので、少なくともerrorではなくてwarnかinfo程度にしておきたい
  • 数回ためして全部ダメだったら初めてerrorとして通知したい
  • Error Handling · mperham/sidekiq Wiki
    • 規定のリトライ回数実行してもだめだったときの処理を↓のように書ける
    • ので、workerの設定側で
      • 基本的にはwarnでSentryに投げる
      • sidekiq_retries_exhaustedではerrorで投げる
      • のようにすれば目的達成できるかな
class FailingWorker
  include Sidekiq::Worker

  sidekiq_retries_exhausted do |msg, ex|
    Sidekiq.logger.warn "Failed #{msg['class']} with #{msg['args']}: #{msg['error_message']}"
  end
  
  def perform(*args)
    raise "or I don't work"
  end
end
  • しかし↑で書いたやり方だと、sentryが定義しているやりかたを完全に上書きするようになってしまう。なんかもうちょっとスマートなやり方ないかな
  • sentryはこんな感じでsidekiqのerror_handlersを定義して、server_middlewareにsentry用のmiddlewareを追加している raven-ruby/sidekiq.rb at master · getsentry/raven-ruby
    • sidekiqのcontextに、何回目のエラーであるという情報は含まれないのだろうか
    • sentryの実際のエラーページ見た感じだと含まれてなさそう?
  • 結局、自作のerror_handlersを定義する必要があるかな
    • ravenの読み込み方を工夫すると、sidekiq用のコードを読ませずにロードできそう
      • gem 'sentry-raven, require: 'sentry-raven-without-integrations'
      • ドキュメントもあった
  • error_handlersに失敗回数渡せるのかな
    • ざっと見た感じでは渡せていそうなので、頑張ればできるか
    • だれか他にやってる人いるんじゃないのかな…

elasticsearch

How should I generate an API key that allows me to use the Heroku Platform API? - Heroku Help

  • herokuのAPIをこれを使って生成してみた
  • いつの間にか2酒類API token(それぞれ有効期限が違う)が使えるようになっていたらしい

Chromeで自己証明書(などの不正証明書)を使用したサイトにアクセスする方法 - Qiita

Promise#finally

finallyという名前から、いつ登録しても最後に呼ばれるのでは?と勘違いしていまったが普通に登録した順ですね…。

Promise.resolve(1).then((v) => { console.log(v); return v }).finally((v) => console.log('finally'))
VM502:1 1
VM502:1 finally
Promise {<resolved>: 1}
Promise.resolve(1).finally((v) => console.log('finally')).then((v) => { console.log(v); return v })
VM516:1 finally
VM516:1 1

Type 'string' is not assignable to type 'RequestCredentials' · Issue #21618 · microsoft/TypeScript

  • これはこういうものらしい
  • 最初objectのpropertyとして定義されるときに型が推測されるのでstringとして扱われてしまう
  • fetchの引数として即突っ込む場合はRequestCredentialsと判断される
  • ↓のようにしたら通った
    let options = {
      # ...
      credentials: <RequestCredentials>'include'
    }

RubyMineを使っているならReformatでもっと幸せになろう | mah365

rubymine弱なので、どこかからコピペしたコードのインデントがずれていたときに手動でインデント直したりしていた。reformatという単語だけ覚えておけば次からなんとかなりそう