Rails应用程序失败做显示登录屏幕
我已经安装在CLOUD9 Rails的5应用一个简单的授权下这个要点https://github.com/equivalent/scrapbook2/blob/master/archive/blogs/2016-09-simple-ralis-authentication-for-one-user.mdRails应用程序失败做显示登录屏幕
它完美的CLOUD9,但是当我部署到Heroku的替代登录屏幕我得到404错误。
地址栏显示正确的地址:
https://phone-storage-app.herokuapp.com/login
,但我重定向到标准导轨404页,说我要找的页面不存在。
同样的结果,如果我尝试:
https://phone-storage-app.herokuapp.com/sessions/new
启动权,将https://phone-storage-app.herokuapp.com Heroku的日志显示:
heroku[router]: at=info method=GET path="/" host=phone-storage-app.herokuapp.com request_id=23217153-3c94-483d-957d-c3b70e9212b7 fwd="91.215.176.16" dyno=web.1 connect=2ms service=76ms status=302 bytes=900
heroku[router]: at=info method=GET path="/login" host=phone-storage-app.herokuapp.com request_id=cd28c3ff-2b00-4774-b3a5-8230d758e7d4 fwd="91.215.176.16" dyno=web.1 connect=1ms service=147ms status=404 bytes=1750
环境变量设置是否正确,如AWS S3连接的伟大工程,一旦我删除授权。
尝试预先编译资产 - 结果相同。
现在已经3天了,真的很感激任何想法!
该应用程序必须是超轻型的,所以Devise和其他身份验证引擎不会成为首选路线。
模型/ site_user.rb
class SiteUser
include ActiveModel::Model
attr_accessor :username, :password
def login_valid?
username == ENV['ADMIN_USERNAME'] && password == ENV['ADMIN_PASS']
end
end
控制器/ session_controller.rb
class SessionsController < ApplicationController
def new
@site_user = SiteUser.new
end
def create
sleep 2
site_user_params = params.require(:site_user)
@site_user = SiteUser.new
.tap { |su| su.username = site_user_params[:username] }
.tap { |su| su.password = site_user_params[:password] }
if @site_user.login_valid?
session[:current_user] = true
flash[:notice] = 'Welcome back!'
redirect_to '/contacts'
else
@site_user.password = nil
flash[:error] = 'Sorry, wrong credentils'
render 'new'
end
end
def destroy
reset_session
redirect_to root_path
end
end
控制器/ application_controller.rb
class ApplicationController < ActionController::Base
add_flash_types :notice, :error
protect_from_forgery with: :exception
ApplicationNotAuthenticated = Class.new(Exception)
rescue_from ApplicationNotAuthenticated do
respond_to do |format|
format.json { render json: { errors: [message: "401 Not Authorized"] }, status: 401 }
format.html do
flash[:error] = "You are not authorized to access this page, please log in"
redirect_to '/login'
end
format.any { head 401 }
end
end
def authentication_required!
session[:current_user] || raise(ApplicationNotAuthenticated)
end
end
试图切换到StandardError的继承:
ApplicationNotAuthenticated = Class.new(StandardError)
问题依然存在。
的routes.rb
Rails.application.routes.draw do
get '/login', to: 'sessions#new'
post '/login', to: 'sessions#create'
delete '/logout', to: 'sessions#destroy'
get 'lists/index'
resources :lists
get 'contacts/index'
get 'contacts/download'
get 'contacts/create_list'
get 'contacts/search'
get 'contacts/process_file'
resources :contacts do
collection do
post 'process_file'
post 'save_list'
post 'load_to_s3'
get 'search'
post 'create_list'
end
end
root to: "contacts#index"
end
视图/会话/ new.html.rb
<div style="margin-top:70px">
<section>
<%= form_for(:site_user, url: login_path) do |f| %>
<div>
<%= f.label :username %>
<%= f.text_field :username %>
</div>
<div>
<%= f.label :password %>
<%= f.password_field :password %>
</div>
<br />
<div>
<%= f.submit 'Log in' %>
</div>
<% end %>
</section>
</div>
UPDATE 1个
安装宝石跟踪路由。下面是运行它的结果:
CLOUD9
Unused routes (9):
contacts#create
contacts#new
contacts#edit
contacts#show
contacts#update
contacts#update
sessions#new
sessions#create
sessions#destroy
的Heroku
Unused routes (6):
contacts#create
contacts#new
contacts#edit
contacts#show
contacts#update
contacts#update
忘记闲置路线的事实,它告诉我,有某种在Heroku路由问题。这可能与事实有一个事实,即没有控制器的SiteUser模型和没有模型的SessionsController?或者是没有人知道的一些错误?
UPDATE 2
然在Heroku在App在 '发展' 模式。完全困惑!获取“路由错误未初始化的常量SessionsController”。虽然路线显然是正确的。
冉上CLOUD9在App在 '生产' 模式。一切都很完美。
花了我4天,但问题是相当意外。 Git没有同步所需的控制器文件。
$ git commit -am "commit 4"
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
app/assets/javascripts/sessions.coffee
app/assets/stylesheets/sessions.scss
app/controllers/sessions_controller.rb
app/helpers/sessions_helper.rb
app/models/site_user.rb
app/views/sessions/
db/migrate/20170224183940_create_site_users.rb
test/controllers/sessions_controller_test.rb
test/fixtures/site_users.yml
test/models/site_user_test.rb
nothing added to commit but untracked files present
分辨率为运行 $ git add .
然后就是犯如常。