注销在本地工作,但不在Heroku上工作
所以我正在使用设计登录/注销。 我注意到我的sign_out链接在本地运行得很好,但即使在我添加,提交和推送之后,它也无法在Heroku上运行。
这是我在Heroku日志中看到的内容
2014-04-23T22:16:09.987029+00:00 heroku[router]: at=info method=GET path=/users/sign_out host=peaceful-atoll-4795.herokuapp.com request_id=16559a9f-0cff-4179-8aeb-d393ae44de38 fwd="108.233.86.201" dyno=web.1 connect=60ms service=34ms status=404 bytes=1616
请注意,它尝试使用GET方法注销何时应该是DELETE。 当我的路线正确时,为什么使用GET方法?
耙路线:
Prefix Verb URI Pattern Controller#Action new_user_session GET /users/sign_in(.:format) devise/sessions#new user_session POST /users/sign_in(.:format) devise/sessions#create destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy user_password POST /users/password(.:format) devise/passwords#create new_user_password GET /users/password/new(.:format) devise/passwords#new edit_user_password GET /users/password/edit(.:format) devise/passwords#edit PATCH /users/password(.:format) devise/passwords#update PUT /users/password(.:format) devise/passwords#update
devise.rb设置如此……
config.sign_out_via = :delete
从我的视图链接代码
Logged in as . 'navbar-link' %> | 'navbar-link' %> 'navbar-link' %> | 'navbar-link' %>
提前感谢您的任何资源或输入!
所以,正如预期的那样我的路线是正确的,但我的应用程序无法访问jquery_ujs
。
jquery_ujs
有助于制作method: :delete
工作。
为了提供jquery_ujs的正确路径,我添加了gem 'rails_12factor', group: :production
到我的Gemfile并运行了bundle install
rails_12factor
还有助于在Heroku中提供静态资源。
感谢@MichaelSzyndel提供的有用资源…
Heroku上的Rails 4资产管道: https : //devcenter.heroku.com/articles/rails-4-asset-pipeline
盲人回答这里,因为我stil无法评论stackoverflow。 :P很高兴看到applicaiton.js文件以确保。
Rails> ~4.0
您可能需要将rails_12_factor gem包含在gemfile中。 这是因为默认情况下rails 4不会提供静态资产,因此可能存在问题。 请在此处查看: https : //github.com/heroku/rails_12factor#rails-4-serve-static-assets
Rails> ~4.1
您需要将资产预编译声明到application.rb或assets和.rb初始值设定项中。 这是使开发模式与生产模式匹配所必需的。 链轮改变。 检查一下: https : //github.com/rails/sprockets-rails/pull/84
在Heroku上使用Rails 5为我工作的解决方案是简单地重新排序js文件,如下所示:
//= require jquery //= require jquery_ujs //= require turbolinks //= require bootstrap-sprockets
为了快速修复,
config.sign_out_via = :delete
至
config.sign_out_via = :get
在config / devise.rb中。
可悲的是,它在生产模式下运作良好。 但它会在开发模式中出现错误。
这是解决方案的原始链接。
Ruby on Rails:无法在生产中退出应用程序