<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luis Porras</title>
    <description>The latest articles on DEV Community by Luis Porras (@lporras).</description>
    <link>https://dev.to/lporras</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F168705%2F456c7490-bdf9-47e0-841f-76ff594f0133.png</url>
      <title>DEV Community: Luis Porras</title>
      <link>https://dev.to/lporras</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lporras"/>
    <language>en</language>
    <item>
      <title>Usa el poder de Sidekiq Jobs con CronJobs</title>
      <dc:creator>Luis Porras</dc:creator>
      <pubDate>Mon, 05 May 2025 14:43:28 +0000</pubDate>
      <link>https://dev.to/lporras/usa-el-poder-de-sidekiq-jobs-con-cronjobs-2jo9</link>
      <guid>https://dev.to/lporras/usa-el-poder-de-sidekiq-jobs-con-cronjobs-2jo9</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1" class="crayons-story__hidden-navigation-link"&gt;Corre tus tareas recurrentes con Sidekiq&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/webdox"&gt;
            &lt;img alt="WebdoxCLM logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.dev.to%2Fdynamic%2Fimage%2Fwidth%3D90%2Cheight%3D90%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto%2Fhttps%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Forganization%252Fprofile_image%252F1415%252F2c163ddb-5577-49e5-9a66-9cb94a7f8ad2.png" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/lporras" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F168705%2F456c7490-bdf9-47e0-841f-76ff594f0133.png" alt="lporras profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/lporras" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Luis Porras
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Luis Porras
                
              
              &lt;div id="story-author-preview-content-720640" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/lporras" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F168705%2F456c7490-bdf9-47e0-841f-76ff594f0133.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Luis Porras&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/webdox" class="crayons-story__secondary fw-medium"&gt;WebdoxCLM&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 7 '21&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1" id="article-link-720640"&gt;
          Corre tus tareas recurrentes con Sidekiq
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ruby"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ruby&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/rails"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;rails&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/redis"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;redis&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;11&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ruby</category>
      <category>rails</category>
      <category>tutorial</category>
      <category>redis</category>
    </item>
    <item>
      <title>Corre tus tareas recurrentes con Sidekiq</title>
      <dc:creator>Luis Porras</dc:creator>
      <pubDate>Mon, 07 Jun 2021 16:18:11 +0000</pubDate>
      <link>https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1</link>
      <guid>https://dev.to/webdox/corre-tus-tareas-recurrentes-con-sidekiq-3nj1</guid>
      <description>&lt;p&gt;En Webdox utilizamos &lt;strong&gt;&lt;a href="https://github.com/mperham/sidekiq" rel="noopener noreferrer"&gt;Sidekiq&lt;/a&gt;&lt;/strong&gt; como nuestra plataforma para procesar tareas asíncronas.  &lt;strong&gt;Sidekiq&lt;/strong&gt; utiliza hilos (threads) para manejar varias tareas al mismo tiempo en un mismo proceso.&lt;/p&gt;

&lt;p&gt;Tenemos muchas tareas que ejecutamos de forma asíncrona con Sidekiq, por ejemplo: El envío de notificaciones por correo, la reindexación de contratos, la generación masiva de contratos y el inicio de la firma electrónica de cada contrato masivo, etc&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sidekiq&lt;/strong&gt; se puede usar de forma gratuita y de forma paga.  Cuando usamos la forma gratuita hay ciertas funcionalidades que no se incluyen y una de estas es ejecutar CRON JOBS.  Con esta funcionalidad podríamos tomar una tarea de Sidekiq y ejecutarla recurrentemente cada cierto tiempo con &lt;a href="https://www.hostinger.es/tutoriales/cron-job" rel="noopener noreferrer"&gt;Cron jobs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Afortunadamente existen Gemas que funcionan como plugins de Sidekiq y en Webdox utilizamos una para ejecutar tareas recurrentes de forma gratuita, su nombre es &lt;strong&gt;&lt;a href="https://github.com/Moove-it/sidekiq-scheduler" rel="noopener noreferrer"&gt;Sidekiq Scheduler&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A continuación un pequeño tutorial de cómo utilizar Sidekiq Scheduler&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalación y Configuración
&lt;/h2&gt;

&lt;p&gt;Agregamos la gema en nuestro Gemfile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Gemfile&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'sidekiq-scheduler'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y Ejecutamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bundle install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creamos un Worker de Sidekiq el cual se ejecutará cada cierto tiempo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;hello_world_worker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt;

&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'sidekiq-scheduler'&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HelloWorldWorker&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;Sidekiq&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Worker&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;perform&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s1"&gt;'Hello world'&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;/div&gt;



&lt;p&gt;Para configurar la periodicidad del Worker modificamos el archivo de configuración de Sidekiq, un apartado de Scheduler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config/sidekiq.yml&lt;/span&gt;

&lt;span class="na"&gt;:schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;hello_world&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*'&lt;/span&gt;   &lt;span class="c1"&gt;# Runs once per minute&lt;/span&gt;
    &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HelloWorldWorker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y corremos Sidekiq:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle &lt;span class="nb"&gt;exec &lt;/span&gt;sidekiq &lt;span class="nt"&gt;-C&lt;/span&gt; config/sidekiq.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez iniciado Sidekiq veremos como se imprime "Hello world" cada minuto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2021-06-07T15:54:38.710Z 62465 TID-ownzi9r98 INFO: Running in ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin20]
2021-06-07T15:54:38.710Z 62465 TID-ownzi9r98 INFO: See LICENSE and the LGPL-3.0 for licensing details.
2021-06-07T15:54:38.710Z 62465 TID-ownzi9r98 INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org
2021-06-07T15:54:38.723Z 62465 TID-ownzi9r98 INFO: Loading Schedule
2021-06-07T15:54:38.723Z 62465 TID-ownzi9r98 INFO: Schedule empty! Set Sidekiq.schedule
2021-06-07T15:54:38.724Z 62465 TID-ownzi9r98 INFO: Schedules Loaded
2021-06-07T15:54:38.734Z 62465 TID-ownzi9r98 INFO: Reloading Schedule
2021-06-07T15:54:38.734Z 62465 TID-ownzi9r98 INFO: Loading Schedule
2021-06-07T15:54:38.790Z 62465 TID-ownzi9r98 INFO: Scheduling hello_world {"cron"=&amp;gt;"0 * * * * *", "class"=&amp;gt;"HelloWorldWorker", "queue"=&amp;gt;"default"}
2021-06-07T15:54:38.791Z 62465 TID-ownzi9r98 INFO: Schedules Loaded
2021-06-07T15:54:38.791Z 62465 TID-ownzi9r98 INFO: Starting processing, hit Ctrl-C to stop
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-4a465f9e9646157552de7f5c INFO: start
Hello world
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-4a465f9e9646157552de7f5c INFO: done: 0.0 sec
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-64dc6b6cb06ebf580c3faae6 INFO: start
Hello world
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-64dc6b6cb06ebf580c3faae6 INFO: done: 0.0 sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Además tenemos la opción de visualizar las tareas recurrentes en el panel de administración de Sidekiq si realizamos la siguiente configuración:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config.ru&lt;/span&gt;

&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'sidekiq/web'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'sidekiq-scheduler/web'&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="no"&gt;Sidekiq&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Web&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsluy07gqr7th4o4tvxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsluy07gqr7th4o4tvxu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por último recomendamos utilizar la página &lt;a href="https://crontab.guru/" rel="noopener noreferrer"&gt;CronTabGurú&lt;/a&gt; para cuando necesitemos configurar la periodicidad de las tareas recurrentes con la sintaxis de Cron Jobs.&lt;/p&gt;

&lt;p&gt;Tener en cuenta que la sintaxis de cron jobs que utiliza Sidekiq Scheduler tiene una sección extra en la parte de adelante la cual nos permite configurar los segundos.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>tutorial</category>
      <category>redis</category>
    </item>
  </channel>
</rss>
