应用程序在亚马逊弹性beanstalk上运行 Rails 4.2.0 ,设计3.4.1 。当用户登录时,他们会获得相应的
成功登记。
消息...但“已成功登录。”会在网站上查看的每个后续页面上重复。
然后当用户访问/users/sign_out
时,他们仍然会获得“已成功签名。”闪存消息并保持登录状态。
但现在浏览网站会在用户登录后正常运行。
成功退出网站需要第二次访问/users/sign_out
。
此问题与生产环境隔离。所以我认为这与围绕 AWS Elastic Beanstalk 的 DNS 问题有关。我在过去尝试在弹性beanstalk 上设置 cookies 时遇到了一些问题,其中亚马逊为我分配了一个名称,如 http://app-name.elasticbeanstalk .com / 然后DNS将此设置为 http://app-name.ourdomain.com/
这可能是_app / controllers / application_controller.rb_中的一个问题:
class ApplicationController < ActionController::Base
protect_from_forgery
...
def default_url_options
if Rails.env.production?
{:host => "app-name.ourdomain.com"}
else
{}
end
end
...
end
这已添加到应用程序控制器中,以便 Rails 在构造URL时使用正确的主机名。如果没有这个,Rails会使用 http://app-name.elasticbeanstalk.com/
构建所有网址但是,如果这与 config / environments / production.rb 文件有关,我将其投入:
Rails.application.configure do
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_files = false
config.assets.js_compressor = :uglifier
config.assets.compress = true
config.assets.compile = true
config.assets.digest = true
Fog.credentials = { :path_style => true }
config.action_controller.asset_host = "//assets.host.com"
config.assets.prefix = "/admin"
config.log_level = :debug
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
end