<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="162701" data-post-id="162701">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bennelsonweiss" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bennelsonweiss/120/16285_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bennelsonweiss
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sorentwo" data-post="181" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/48/37360_2.png" class="avatar"> sorentwo:</div>
<blockquote>
<p>This has come up fairly often. The fact that this is ambiguous leads me to think that there is a case for an <code>Oban.delete/1</code> function. Not that it is difficult to implement, but it would be the “blessed” way to delete a job.</p>
</blockquote>
</aside>
<p>I do tend to think that if something comes up multiple times it would probably benefit from a blessed solution.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="162701" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/183">Post #182</a>
	                </div>
	            </div>
              <div id="likers-container-162701" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="162701"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #182"></div>
  </section>
</div>
    <div class="postbit" id="163468" data-post-id="163468">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Oban <a href="https://github.com/sorentwo/oban/blob/master/CHANGELOG.md#110--2020-02-17" rel="noopener nofollow ugc">v1.1.0</a> is out with some minor features and a ton of reliability improvements prompted by <a href="https://github.com/sorentwo/oban/issues/168" rel="noopener nofollow ugc">edge cases</a> from <a href="https://github.com/sorentwo/oban/issues/169" rel="noopener nofollow ugc">real world usage</a>. Thanks to everybody that reported the issues and helped in proving the solutions <img src="https://forum.elixirforum.com/images/emoji/apple/yellow_heart.png?v=15" title=":yellow_heart:" class="emoji" alt=":yellow_heart:" loading="lazy" width="20" height="20"></p>
<p>From the <a href="https://github.com/sorentwo/oban/blob/master/CHANGELOG.md#110--2020-02-17" rel="noopener nofollow ugc">CHANGELOG</a>:</p>
<h3><a name="p-163468-fixed-1" class="anchor" href="#p-163468-fixed-1" aria-label="Heading link" rel="nofollow"></a>Fixed</h3>
<ul>
<li>
<p>[Oban.Crontab] Allow any number of spaces and/or tabs in cron expressions.</p>
</li>
<li>
<p>[Oban.Pruner] Prevent deadlocks while pruning by ensuring that only a single node can prune at any given time. (Thanks <a class="mention" href="/u/bgentry" rel="nofollow">@bgentry</a>)</p>
</li>
<li>
<p>[Oban.Queue.Executor] Improve handling of nested/linked process failures.  Previously if a job spawned a process that crashed (i.e. through Task.async) then the job was left stuck in an executing state.</p>
</li>
</ul>
<h3><a name="p-163468-added-2" class="anchor" href="#p-163468-added-2" aria-label="Heading link" rel="nofollow"></a>Added</h3>
<ul>
<li>
<p>[Oban.Worker] Add <code>timeout/1</code> callback for limiting how long a job may execute. The default value is <code>:infinity</code>, which allows a job to run indefinitely and mirrors the previous behavior. (Thanks to <a class="mention" href="/u/benwilson512" rel="nofollow">@benwilson512</a> who did the initial implementation)</p>
</li>
<li>
<p>[Oban.Telemetry] Add <code>:error</code> and <code>:stack</code> to <code>trip_circuit</code> event metadata.</p>
</li>
<li>
<p>[Oban.Queue.Executor] Retry success/failure database updates after a job finishes.</p>
<p>On occasion something may happen to the database connection and updating a job’s state would fail. Now we retry writing with a linear backoff to prevent the job from getting stuck in an executing state.  (Thanks to <a class="mention" href="/u/coladarci" rel="nofollow">@coladarci</a>)</p>
</li>
</ul>
<h3><a name="p-163468-changed-3" class="anchor" href="#p-163468-changed-3" aria-label="Heading link" rel="nofollow"></a>Changed</h3>
<ul>
<li>
<p>[Oban.Worker] Tighten the spec for <code>perform/2</code>. Now workers are expected to return only <code>:ok</code>, <code>{:ok, result}</code> or <code>{:error, reason}</code>. A warning is logged if any other value is returned—for high throughput systems this may cause performance issues and you should update your worker’s return values.</p>
<p>Returning a success tuple is supported for testing purposes and backward compatibility, while returning <code>:ok</code> on success if preferred. (Thanks to <a class="mention" href="/u/sasajuric" rel="nofollow">@sasajuric</a>)</p>
</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="163468" data-batch-url="/posts/batch_likers">
                        13
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/184">Post #183</a>
	                </div>
	            </div>
              <div id="likers-container-163468" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="163468"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #183"></div>
  </section>
</div>
    <div class="postbit" id="163621" data-post-id="163621">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="smolcatgirl" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  smolcatgirl
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi,<br>
I have a question. I use a API that bans or rate limits its users if they do more than one request in 4 seconds. Is there any to make some kinda interval so that if I have some jobs related to this api and some not, then the there will be always be 4 seconds between each job with calls to this api and the worker could run other jobs meanwhile. If there are no other jobs then the worker could just wait until 4 seconds has passed. Any thoughts on this?</p>
<p>Thanks for your time! <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="163621" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/185">Post #184</a>
	                </div>
	            </div>
              <div id="likers-container-163621" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="163621"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #184"></div>
  </section>
</div>
    <div class="postbit" id="163628" data-post-id="163628">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="DiodonHystrix" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/DiodonHystrix/120/18329_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  DiodonHystrix
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Simplest solution could be to define a queue with concurrency set to 1 for that jobs and sleep necessary time at the end of each job.</p>
<p>If it’s not possible, I’d use GenServer to throttle the requests.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="163628" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/186">Post #185</a>
	                </div>
	            </div>
              <div id="likers-container-163628" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="163628"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #185"></div>
  </section>
</div>
    <div class="postbit" id="163631" data-post-id="163631">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="smolcatgirl" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  smolcatgirl
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>Simplest solution could be to define a queue with concurrency set to 1 for that jobs and sleep necessary time at the end of each job.</p>
</blockquote>
<p>This is what I lean towards right now but I find it ugly.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="163631" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/187">Post #186</a>
	                </div>
	            </div>
              <div id="likers-container-163631" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="163631"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #186"></div>
  </section>
</div>
    <div class="postbit" id="163635" data-post-id="163635">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="smolcatgirl" data-post="185" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/s/c5a1d2/48.png" class="avatar"> smolcatgirl:</div>
<blockquote>
<p>I have a question. I use a API that bans or rate limits its users if they do more than one request in 4 seconds. Is there any to make some kinda interval so that if I have some jobs related to this api and some not, then the there will be always be 4 seconds between each job with calls to this api and the worker could run other jobs meanwhile. If there are no other jobs then the worker could just wait until 4 seconds has passed. Any thoughts on this?</p>
</blockquote>
</aside>
<p>You can model basic rate limiting by conditionally returning an error tuple:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MyApp.LimitedWorker do
  # You may want to use a longer period
  use Oban.Worker, unique: [period: 4]

  @impl Oban.Worker
  def perform(%{"user_id" =&gt; user_id}, _job) do
    if MyApp.Accounts.over_rate_limit?(user_id) do
      {:error, :over_rate_limit}
    else
      do_whatever_this_worker_does()

      :ok
    end
  end

  # Retry every four seconds, you'd probably want this to be smarter.
  @impl Oban.Worker
  def backoff(_attempt), do: 4
end
</code></pre>
<p>That version will retry the job later after the rate limit has cooled down. Note that you’ll get error reports for each retry, so you may want to ignore the <code>:over_rate_limit</code> error in your error reporter.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="163635" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/188">Post #187</a>
	                </div>
	            </div>
              <div id="likers-container-163635" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="163635"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #187"></div>
  </section>
</div>
    <div class="postbit" id="163639" data-post-id="163639">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="smolcatgirl" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  smolcatgirl
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks. To me Oban seems really great but also really complex and I have a hard time grasping it. Is there some example codebase to look at to understand better?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="163639" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/189">Post #188</a>
	                </div>
	            </div>
              <div id="likers-container-163639" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="163639"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #188"></div>
  </section>
</div>
    <div class="postbit" id="163645" data-post-id="163645">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sasajuric" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/120/991_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sasajuric
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Elixir In Action</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>You could use <a href="https://github.com/uwiger/jobs" rel="noopener nofollow ugc">jobs</a> for that, it supports rate limited queues. Note that job` is not about persistence, so you might still combine it with oban. Basically, in each worker perform you ask your jobs-based rate limited queue for permission. Since jobs is in-memory, a system restart might cause an occasional rate offense (e.g. you execute the job, then the system restarts, and you end up executing another job in the interval of 4 seconds).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="163645" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/190">Post #189</a>
	                </div>
	            </div>
              <div id="likers-container-163645" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="163645"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #189"></div>
  </section>
</div>
    <div class="postbit" id="164031" data-post-id="164031">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jc00ke" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jc00ke/120/18365_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jc00ke
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Are there specific things you find confusing that we could help you, and others, understand? We could add these topics to a knowledge base/wiki like <a href="https://github.com/mperham/sidekiq/wiki" rel="noopener nofollow ugc">Sidekiq’s wiki</a>.</p>
<p>In terms of the rate limiter part, I’ve used <a href="https://github.com/grempe/ex_rated" rel="noopener nofollow ugc">ExRated</a> in the past (though I wish it were named something different) and <a href="https://github.com/ExHammer/hammer" rel="noopener nofollow ugc">ExHammer</a> also looks very nice. Those you could use for the</p>
<aside class="quote no-group" data-username="sorentwo" data-post="188" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/48/37360_2.png" class="avatar"> sorentwo:</div>
<blockquote>
<p>if MyApp.Accounts.over_rate_limit?(user_id) do</p>
</blockquote>
</aside>
<p>part. You would still likely have to “fail” the job so Oban will retry later.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164031" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/191">Post #190</a>
	                </div>
	            </div>
              <div id="likers-container-164031" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164031"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #190"></div>
  </section>
</div>
    <div class="postbit" id="164156" data-post-id="164156">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="anthonator" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/anthonator/120/14467_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  anthonator
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Is there any sort of way to make <code>assert_enqueued</code> act like <code>assert_receive</code>? Or is there some sort of monitor I can subscribe a test process to so I can get notified when a job gets enqueued before using <code>assert_enqueued</code>?   There are times I want to test a job gets enqueued as part of an async process.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164156" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/192">Post #191</a>
	                </div>
	            </div>
              <div id="likers-container-164156" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164156"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #191"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/22449/load_more?page=20">Load more posts (121 remaining)</a>
</div></template></turbo-stream>