恢复数据库后,从相同的 SGID 加载 ActionText::Attachable 不再有效
Loading ActionText::Attachable from identical SGID no longer works after restoring database
我正在使用 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")
这有效并且 returns 关联的 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 'portable' 跨服务器?
我是 运行宁 Rails 6.1 alpha。
好的,抱歉,但事实证明,尽管 Rails.application.credentials.secret_key_base
在两台服务器上定义相同,但其中一个 (Heroku) 还定义了一个不同的 SECRET_KEY_BASE
环境变量,该变量似乎优先.一旦我在新服务器上定义了它,SGID 就可以正常工作了。
我正在使用 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")
这有效并且 returns 关联的 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 'portable' 跨服务器?
我是 运行宁 Rails 6.1 alpha。
好的,抱歉,但事实证明,尽管 Rails.application.credentials.secret_key_base
在两台服务器上定义相同,但其中一个 (Heroku) 还定义了一个不同的 SECRET_KEY_BASE
环境变量,该变量似乎优先.一旦我在新服务器上定义了它,SGID 就可以正常工作了。