我有一个长期运行的 Rails 应用程序,运行在 Mac OS X (apache2) 上。该设置使用 Apache 虚拟主机和 Passenger。Rails 应用程序还使用 HTTP 基本身份验证。
我需要将应用程序从一个 URL 域迁移到另一个 URL 域 - 两个域名在一段时间内有部分重叠可以同时访问。
为此,我将新域名作为现有域名的 ServerAlias 添加在 Passenger Virtual Host 配置中。
我现在可以使用旧 URL 和新 URL 从 Safari、Chrome、Firefox 或 Internet Explorer 中浏览 Rails 应用程序。
我还可以使用 Safari、Chrome 或 Firefox 将更新“HTTP 发布”到 Rails 应用程序。一切都很好。
除了,尝试从 Internet Explorer 发布更新导致 Rails 应用拒绝更新,
Rails 应用程序日志包含以下消息:
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
我的其他域名和别名在同一台机器上运行良好。
如果您能就导致 Rails 应用拒绝来自 IE 的帖子的原因提出任何建议,我们将不胜感激。
更新:我尝试将新域名更改为 ServerName,将旧域名更改为 ServerAlias,但使用新域名时仍然会出现 422 错误。我感到很困惑。
答案1
仔细观察日志,你那里一定有一个未编码的符号。422
意味着你收到了正确的请求,但由于(通常)编码问题而无法处理。
来自 rfc
The 422 (Unprocessable Entity) status code means the server
understands the content type of the request entity (hence a
415(Unsupported Media Type) status code is inappropriate), and the
syntax of the request entity is correct (thus a 400 (Bad Request)
status code is inappropriate) but was unable to process the contained
instructions. For example, this error condition may occur if an XML
request body contains well-formed (i.e., syntactically correct), but
semantically erroneous, XML instructions.
答案2
我不知道为什么这有效,但希望它能够帮助别人......
我发现,如果我将新 URL 配置为使用相同的子域,则会接受来自 MSIE 的 Rails POST。
所以,
如果设置为,
originalsubdomain.originaldomainname.com
如果将新 URL 设置为,
newsubdomain.newdomainname.com
...然后 Safari、FireFox 和 Chrome 都很顺利,但是 MSIE 导致 Rails 在 POST 时出现问题(在多台机器上测试过)。
但是,如果我将新 URL 设置为
originalsubdomain.newdomain.com
它可以与所有列出的浏览器兼容(已在多台机器上测试)。
任何建议为什么这可能会受到赞赏。