<p>I use <code>serialize</code> in one <code>ActiveRecord</code> model to serialize an <code>Array</code> of simple Hashes into a text database field. I even use the second parameter to coerce deserialization into <code>Array</code>s.</p>

<pre><code>class Shop &lt; ActiveRecord::Base
  serialize : recipients, Array
end
</code></pre>

<p>It seems to work fine but, after a few requests, the content of <code>recipients</code> turns to <code>HashOfIndifferentAccess</code> hashes instead of arrays. This only happens after a few reloads of the models and I haven't been able to reproduce it in tests or the console, only in production environment.</p>

This seems like something you should be able to reproduce locally with enough testing.
Look through your production db and logs and attempt to use the same data in your local tests.
The hashwithindifferentaccess is coming from the controller. Perhaps you are taking data straight from the controller and not massaging it at all.
Create a gist of your page, controller, and model saving code, and update this question.
Depending on how deeply nested your hash, you can convert a HWIA hash to a regular one before saving.
Shouldn't be too hard to debug and resolve.