<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>fumesy (arnkorty)</title>
    <link>https://ruby-china.org/fumesy</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Opal on Rails: Replacing CoffeeScript with client-side Ruby</title>
      <description>&lt;p&gt;&lt;a href="http://blog.elpassion.com/opal-on-rails-coffeescript-ruby/" rel="nofollow" target="_blank"&gt;http://blog.elpassion.com/opal-on-rails-coffeescript-ruby/&lt;/a&gt;&lt;/p&gt;</description>
      <author>fumesy</author>
      <pubDate>Thu, 17 Sep 2015 14:36:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/27374</link>
      <guid>https://ruby-china.org/topics/27374</guid>
    </item>
    <item>
      <title>通过 ActiveJob 获取 real job id (Sidekiq)</title>
      <description>&lt;h3 id="问题"&gt;问题&lt;/h3&gt;
&lt;p&gt;在 rails 4.2 之后，添加了 activejob, 给后台任务 gem 设定的统一的接口.
使用 activejob 时，返回的是它自己的 job id，是与 sidekiq 无相关的 job id，可以通过下面的 log 看出。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# rails console&lt;/span&gt;
&lt;span class="no"&gt;Enqueued&lt;/span&gt; &lt;span class="no"&gt;SearchJob&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Job&lt;/span&gt; &lt;span class="no"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;77819&lt;/span&gt;&lt;span class="n"&gt;ccc&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;01&lt;/span&gt;&lt;span class="n"&gt;ec&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;fee&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8854&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;b47743fee02c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="no"&gt;Sidekiq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;glirid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="ss"&gt;arguments: &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;SearchJob:0x007f8db0874980 @arguments=[2], @job_id="77819ccc-01ec-4fee-8854-b47743fee02c",  @queue_name="glirid"&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;与此同时，sidekiq 输出的 log&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;2015-09-16T01:51:24.607Z 26003 TID-ox5kq0hms SearchJob JID-a780d064a435187572e6d575 INFO: start
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="如何获取sidekiq 的job id"&gt;如何获取 sidekiq 的 job id&lt;/h3&gt;
&lt;p&gt;在 activejob 5.0 中可以通过&lt;a href="https://github.com/rails/rails/blob/master/activejob/lib/active_job/queue_adapters/sidekiq_adapter.rb" rel="nofollow" target="_blank" title=""&gt;provider_job_id&lt;/a&gt; 来获取。但在 activejob 4.2.4 以下的版本并没有直接的方法可以获取。&lt;/p&gt;

&lt;p&gt;下面将以 sidekiq 为例，为 activejob 添加 provider_job_id 获取 real job id.&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config/initializers/active_job.rb&lt;/span&gt;
&lt;span class="no"&gt;ActiveJob&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;class_eval&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="nb"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:provider_job_id&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config/initializers/active_job_sidekiq.rb&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ActiveJob::QueueAdapters::SidekiqAdapter&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;enqueue_with_provider_job_id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;provider_job_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;enqueue_without_provider_job_id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;enqueue_at_with_provider_job_id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;provider_job_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;enqueue_at_without_provider_job_id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

    &lt;span class="n"&gt;alias_method_chain&lt;/span&gt; &lt;span class="ss"&gt;:enqueue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:provider_job_id&lt;/span&gt;
    &lt;span class="n"&gt;alias_method_chain&lt;/span&gt; &lt;span class="ss"&gt;:enqueue_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:provider_job_id&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把以上两个文件放在 &lt;code&gt;config/initializers&lt;/code&gt; 中将会给 activejob 添加了 &lt;code&gt;provider_job_id&lt;/code&gt; 方法获取 real job id, 可通过下面的 log 看出效果。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Enqueued&lt;/span&gt; &lt;span class="no"&gt;SearchJob&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Job&lt;/span&gt; &lt;span class="no"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;86&lt;/span&gt;&lt;span class="n"&gt;a55bc5&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;d6f&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;409&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="n"&gt;a50&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;aa4bf9996659&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="no"&gt;Sidekiq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;glirid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="ss"&gt;arguments: &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;SearchJob:0x007f8daf42a650 @arguments=[2], @job_id="86a55bc5-2d6f-409a-9a50-aa4bf9996659", @provider_job_id="af5c0ed24a7a6c45ec77e640", @queue_name="glirid"&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;与此同时，sidekiq 输出的 log&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;2015-09-16T02:06:01.117Z 26003 TID-ox5kq0hms SearchJob JID-af5c0ed24a7a6c45ec77e640 INFO: start
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>fumesy</author>
      <pubDate>Wed, 16 Sep 2015 10:10:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/27351</link>
      <guid>https://ruby-china.org/topics/27351</guid>
    </item>
  </channel>
</rss>
