恢复数据库后,无法从相同的SGID加载ActionText :: Attachable

问题描述

我正在使用ActionText并嵌入IFRAME用于YouTube和Spotify嵌入。效果很好!这是渲染HTML时的样子(这是嵌入Spotify的效果):

<action-text-attachment sgid="BAh7CEkiCGdpZAY6BkVUSSIoZ2lkOi8vYmxvZ2xpbmUvU3BvdGlmeS8xP2V4cGlyZXNfaW4GOwBUSSIMcHVycG9zZQY7AFRJIg9hdHRhY2hhYmxlBjsAVEkiD2V4cGlyZXNfYXQGOwBUMA==--fcc8035346e616846f2068f52f685d2feb3b30e2" content-type="application/octet-stream"><div class="embed-responsive embed-responsive-16by9">
  <iframe width="300" height="380" title="Spotify Embed: American Head" src="https://open.spotify.com/embed/album/4H8NX3ovAZdY2iJmwSNqlw?si=cf4XXoavSAynCBOvqltSHw"></iframe>
</div>
</action-text-attachment>

我最近(从Heroku)导出了数据库并将其还原到另一个VPS提供程序。对于我的ActiveStorage Blob(图像等)来说,效果很好,但是嵌入不再起作用。上面的示例尽管具有相同的sgiD,但现在看起来像这样:

<action-text-attachment sgid="BAh7CEkiCGdpZAY6BkVUSSIoZ2lkOi8vYmxvZ2xpbmUvU3BvdGlmeS8xP2V4cGlyZXNfaW4GOwBUSSIMcHVycG9zZQY7AFRJIg9hdHRhY2hhYmxlBjsAVEkiD2V4cGlyZXNfYXQGOwBUMA==--fcc8035346e616846f2068f52f685d2feb3b30e2" content-type="application/octet-stream">☒</action-text-attachment>

在Heroku控制台上,我可以使用以下方式加载模型:

SignedGlobalID.find("BAh7CEkiCGdpZAY6BkVUSSIoZ2lkOi8vYmxvZ2xpbmUvU3BvdGlmeS8xP2V4cGlyZXNfaW4GOwBUSSIMcHVycG9zZQY7AFRJIg9hdHRhY2hhYmxlBjsAVEkiD2V4cGl
yZXNfYXQGOwBUMA==--fcc8035346e616846f2068f52f685d2feb3b30e2",for: "attachable")

这有效并返回关联的ActiveRecord模型。但是,在连接到还原的数据库时运行相同的命令将导致nil

我想知道是否有人能够对此有所了解?

我已将问题缩小为InvalidSignature条消息。例如,在Heroku上,我看到以下内容

SignedGlobalID.send(:pick_verifier,for: "attachable").verify(node["sgid"])
=> {"gid"=>"gid://myapp/Spotify/1?expires_in","purpose"=>"attachable","expires_at"=>nil}

如果在本地运行,请在本地

ActiveSupport::MessageVerifier::InvalidSignature (ActiveSupport::MessageVerifier::InvalidSignature)

是因为一台服务器上的机密与另一台服务器上的机密不同吗?如果是这样,那么这样做的正确方法是什么,以使sgiD在服务器之间“可移植”?

我正在运行Rails 6.1 alpha。

解决方法

好的,很抱歉,但是事实证明,尽管在两台服务器上都定义了Rails.application.credentials.secret_key_base,但是其中一台服务器(Heroku)也定义了另一个SECRET_KEY_BASE环境变量,该变量似乎是优先的。一旦在新服务器上定义了此名称,SGID即可正常工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...