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で設定を突っ込むとよいのかな
- solrconfig.xmlの一部設定を変更することでschema.xmlを読みに行かせることができる
- sunspotはsolr7系以上で使えるschema.xmlを用意している
- ワンチャン使えるかな?と思ってsolr5.5で試してみたけどだめだったのでsolr7系を使うように変更した
- Apache Solr設定メモ - Qiita
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パッケージをインストール/アンインストールするには
↑でimagemagickをyum経由でインストールするには、関連する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'
- ドキュメントもあった
- ravenの読み込み方を工夫すると、sidekiq用のコードを読ませずにロードできそう
- error_handlersに失敗回数渡せるのかな
- ざっと見た感じでは渡せていそうなので、頑張ればできるか
- だれか他にやってる人いるんじゃないのかな…
elasticsearch
- elasticsearchのデフォルトだと字句解析の結果が直感的ではない
- kuromojiいれた
- Japanese (kuromoji) Analysis Plugin | Elasticsearch Plugins and Integrations [7.4] | Elastic
- searchkick側も
searchkick language: 'japanese'
のようにするだけだった - 簡単すぎるんだけど穴とかないんですかね
- 関連先も検索条件に含めたい
How should I generate an API key that allows me to use the Heroku Platform API? - Heroku Help
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という単語だけ覚えておけば次からなんとかなりそう