ClojureでSnowplow用のイベント コレクターを構築しています(Ring/Compojure を使用)。Ring で透明なピクセルを提供する際に問題が発生しています。これは、ピクセルを送信するための私のコードです:
(ns snowplow.clojure-collector.responses
(:import (org.apache.commons.codec.binary Base64)
(java.io ByteArrayInputStream)))
(def pixel-bytes (Base64/decodeBase64 (.getBytes "R0lGODlhAQABAPAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==")))
(def pixel (ByteArrayInputStream. pixel-bytes))
(defn send-pixel
[]
{:status 200
:headers {"Content-Type" "image/gif"}
:body pixel})
サーバーを起動すると、最初に のパスにヒットしたときにsend-pixel
、ピクセルがブラウザに正常に配信されます。しかし、2 回目以降は毎回、Ring は本文を送信しません (そして content-length 0)。サーバーを再起動しても同じパターンです。
そうではないいくつかのこと:
- を使用してこれを複製し
wget
、断続性がブラウザのキャッシュの問題ではないことを確認しました "R01GOD..."
コマンドライン ( ) で base64 文字列を生成したcat original.gif | base64
ので、そこに問題がないことがわかります- ピクセルが正常に送信されたら、その内容が正しいことを確認しました (
diff original.gif received-pixel.gif
)
私は Clojure を初めて使用します。コードに厄介な動的グレムリンがあると思いますが、それを見つけるのに助けが必要です。