2017-02-23 115 views
0

我已经安装在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”。虽然路线显然是正确的。

Routing Error

冉上CLOUD9在App在 '生产' 模式。一切都很完美。

回答

0

花了我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 .

然后就是犯如常。

相关问题