プレビュー機能を追加しました

初めは適当に使うつもりだったのでプレビューなんかいらないと思っていたけど、使っていると地味にプレビューが欲しくなったので追加しました。

半分は Elm で実装してみました、初め elm-dialog でやっていたのでですが Bootstrap3 でデザインがうまく調整できなかったので、 github elm-dialog のコードを参考に (といっても、ほぼマルパクリですが…) 調整して組み込みました。

プレビューデータをセッションに保存していたのですが、YesodがディフォルトでClient Side Session だったということを忘れていて、cookieが4KBを こえ、ある程度でかいプレビューデータの場合、レスポンスヘッダーが腐って、レスポンスが途中で止まってしまう事象に少しハマりました。

YesodのRedis Session Backend

そこで、Server Side Sessionへ変更しようと変更をかけている途中で、hedisパッケージとhedis-config、serversession-backend-redisなどをYesodへ 組み込むのですが、hedis-configの型変換する部分で、PortID型のServerコンストラクタがhedisの最新から外されたりと、色々踏んだり蹴ったりだったので 自分で、修正パッチを書いて対応しました、一応本家にはプルリクエストは送りましたが取り込んでもらえるかは分かりません。

ただ、hackageに無くても、直接githubのリソースから自分のパッケージに追加できる方法があって、stack.ymlへ

- git: https://github.com/karky7/serversession
  commit: 4a31a18fe74bed006af8c6266518cb3f85303880
  subdirs:
    - serversession-frontend-yesod
    - serversession-backend-redis
- git: https://karky7@bitbucket.org/karky7/hedis-config.git
  commit: 88d19b2d7342146b17ffb3f1d992930baff154f8

こんな感じで書くと、取り込むことができます、subdirはリポジトリ配下にそれぞれパッケージングされていて、そこにcabalファイルがある構成の場合の書き方です。

なんでも自分でやってる感じが、孤独を感じます。

そして、プレビューすると

こんな感じでポップアップします、ただ、実装が終わってからから気づいたのですが、横のサイズが固定なので出力がタブレットかスマホ表示限定になってしまって、PCの出力が確認 できません。

表示切り替えの機能は、今後追加していこうと思います。

サーバー設定

セッションのストレージにredisを利用するため、接続設定を追加する必要があります。localhostの設定であれば書く必要はありませんが、必要であれば、追記してください、誰に説明しているのか分かりませんが。

  • /etc/sysconfig/houbou
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DATABASE=0
REDIS_MAX_CONNECTIONS=32
REDIS_MAX_IDLE_TIME=60

そして忘れずにサービスを再起動してください。

$ sudo systemctl restart houbou

謝辞

Elmの実装途中で色々試行錯誤していてたところ、twitter助言をいただき、大変助かりました。

開発って自分の知らない領域に手を出すときに、方向性を決めるのが一番難しいいんですよね、大変ありがたかったです。portとsubscriptionの一歩進んだ使い方を、実践できました、助言がなかったらもっと無駄な事してたと思います。

@arrowM_ さん、ありがとうございました。

Posted on 2020-11-04 18:03:23

はじめまして

静岡の極東の浜辺で何かをやっている人間です、基本的に季節を問わずBBQとオフロードをバイクで走るのがが大好きです、暇があれば何かを焼いているか走っています。どこかの浜で焼いている姿をみたら、gentooの話もで飲みながらしましょう...

Posted

Amazon

tags

日本酒池 広井酒店 やがら やっぱた 刺身 丸干し 東京マラソン fpm php82 servant thread spawn Rust Oracle Linux 8 microcode firmware linux openzfs zfs gitea 麒麟 真野鶴 金鶴 日本酒 docker oracle pod podman cli virtualbox VirtualBox epub mobi calibre mask lens ワンライナー php redmine Linux Oracle Map OMap omap map BBQ カテゴリ管理 カテゴリ timestamp date oracle database string 麦焼酎 ダービー process 磨き蒸留 広井酒店、日本酒 芋焼酎 焼酎 ゆるキャン 広井酒店、日本酒池 spring framework java persistent spring session session spring hdbc-odbc persistent-odbc odbc day utctime スィート レマンの森 elm初期化 elm バイク xlr80 esqueleto database xl2tpd strongswan vpn l2tp ipsec 正月 ゲーム grub nginx systemctl portage 豚骨 圧力鍋 yesod-auth-hashdb yesod-auth yesod