2016-08-16 70 views
0

這是我的問題:當我運行命令rails server並轉到localhost:3000我得到頁面「Error 404 not found」,因此我嘗試將localhost:3000/home作爲視圖,但問題仍然存在。這是在日誌中的CMD ..爲什麼在Ruby on Rails中出現「找不到錯誤404」?

C:\Sites\ifurniture>rails s 
=> Booting WEBrick 
=> Rails 4.2.7.1 application starting in development on http://localhost:3000 
=> Run `rails server -h` for more startup options 
=> Ctrl-C to shutdown server 
[2016-08-16 12:45:45] INFO WEBrick 1.3.1 
[2016-08-16 12:45:45] INFO ruby 2.2.4 (2015-12-16) [i386-mingw32] 
[2016-08-16 12:45:45] INFO WEBrick::HTTPServer#start: pid=192 port=3000 


Started GET "/" for ::1 at 2016-08-16 12:45:47 -0500 
    ActiveRecord::SchemaMigration Load (1.0ms) SELECT "schema_migrations".* FROM 
"schema_migrations" 
Processing by Refinery::PagesController#home as HTML 
    Parameters: {"locale"=>:es} 
    Refinery::Page Load (1.0ms) SELECT "refinery_pages".* FROM "refinery_pages" 
WHERE "refinery_pages"."link_url" = ? LIMIT 1 [["link_url", "/"]] 
    Refinery::Page Load (7.0ms) SELECT "refinery_pages".* FROM "refinery_pages" 
WHERE "refinery_pages"."menu_match" = ? ORDER BY "refinery_pages"."id" ASC LIMI 
T 1 [["menu_match", "^/404$"]] 
    Rendered public/404.html (14.0ms) 
Filter chain halted as :find_page rendered or redirected 
Completed 404 Not Found in 1974ms (Views: 1775.1ms | ActiveRecord: 11.0ms) 


Started GET "/home" for ::1 at 2016-08-16 12:46:00 -0500 
Processing by Refinery::PagesController#show as HTML 
    Parameters: {"path"=>"home", "locale"=>:es} 
    Refinery::Page Load (29.0ms) SELECT "refinery_pages".* FROM "refinery_pages" 
INNER JOIN "refinery_page_translations" ON "refinery_page_translations"."refine 
ry_page_id" = "refinery_pages"."id" WHERE "refinery_pages"."parent_id" IS NULL A 
ND "refinery_page_translations"."locale" IN ('es', 'en') AND "refinery_page_tran 
slations"."slug" = 'home' ORDER BY "refinery_pages"."id" ASC LIMIT 1 
    Refinery::Page Load (0.0ms) SELECT "refinery_pages".* FROM "refinery_pages" 
WHERE "refinery_pages"."menu_match" = ? ORDER BY "refinery_pages"."id" ASC LIMI 
T 1 [["menu_match", "^/404$"]] 
    Rendered public/404.html (0.0ms) 
Filter chain halted as :find_page rendered or redirected 
Completed 404 Not Found in 1475ms (Views: 1207.8ms | ActiveRecord: 29.0ms) 
[2016-08-16 12:46:07] INFO going to shutdown ... 
[2016-08-16 12:46:07] INFO WEBrick::HTTPServer#start done. 
Exiting 

這是我的路線文件..

Rails.application.routes.draw do 
    # This line mounts Refinery's routes at the root of your application. 
    # This means, any requests to the root URL of your application will go to Refinery::PagesController#home. 
    # If you would like to change where this extension is mounted, simply change the 
    # configuration option `mounted_path` to something different in config/initializers/refinery/core.rb 
    # 
    # We ask that you don't use the :as option here, as Refinery relies on it being the default of "refinery" 
    post '/suscribir' => 'subscribe#create' 
    mount Refinery::Core::Engine, at: Refinery::Core.mounted_path 

end 

的pages_Controller.rb代碼..

module Refinery 
    class PagesController < ::ApplicationController 
    include Pages::RenderOptions 
    include Productos 

    before_action :find_page, :set_canonical 
    before_action :error_404, :unless => :current_user_can_view_page? 

    # Save whole Page after delivery 
    after_action :write_cache? 

    # This action is usually accessed with the root path, normally '/' 
    def home 
     @posts = Blog::Post.newest_first.live.includes(:comments, :categories) 
     render_with_templates? 
    end 

    # This action can be accessed normally, or as nested pages. 
    # Assuming a page named "mission" that is a child of "about", 
    # you can access the pages with the following URLs: 
    # 
    # GET /pages/about 
    # GET /about 
    # 
    # GET /pages/mission 
    # GET /about/mission 
    # 
    def show 
     @productos = Refinery::Productos::Producto.all 
     if should_skip_to_first_child? 
     redirect_to refinery.url_for(first_live_child.url) and return 
     elsif page.link_url.present? 
     redirect_to page.link_url and return 
     elsif should_redirect_to_friendly_url? 
     redirect_to refinery.url_for(page.url), :status => 301 and return 
     end 

     render_with_templates? 
    end 

    protected 

    def requested_friendly_id 
     if ::Refinery::Pages.scope_slug_by_parent 
     # Pick out last path component, or id if present 
     "#{params[:path]}/#{params[:id]}".split('/').last 
     else 
     # Remove leading and trailing slashes in path, but leave internal 
     # ones for global slug scoping 
     params[:path].to_s.gsub(%r{\A/+}, '').presence || params[:id] 
     end 
    end 

    def should_skip_to_first_child? 
     page.skip_to_first_child && first_live_child 
    end 

    def should_redirect_to_friendly_url? 
     requested_friendly_id != page.friendly_id || (
     ::Refinery::Pages.scope_slug_by_parent && 
     params[:path].present? && params[:path].match(page.root.slug).nil? 
    ) 
    end 

    def current_user_can_view_page? 
     page.live? || authorisation_manager.allow?(:plugin, "refinery_pages") 
    end 

    def first_live_child 
     page.children.order('lft ASC').live.first 
    end 

    def find_page(fallback_to_404 = true) 
     @page ||= case action_name 
       when "home" 
        Refinery::Page.find_by(link_url: '/') 
       when "show" 
        Refinery::Page.friendly.find_by_path_or_id(params[:path], params[:id]) 
       end 
     @page || (error_404 if fallback_to_404) 
    end 

    alias_method :page, :find_page 

    def set_canonical 
     @canonical = refinery.url_for @page.canonical if @page.present? 
    end 

    def write_cache? 
     # Don't cache the page with the site bar showing. 
     if Refinery::Pages.cache_pages_full && !authorisation_manager.allow?(:read, :site_bar) 
     cache_page(response.body, File.join('', 'refinery', 'cache', 'pages', request.path).to_s) 
     end 
    end 
    end 
end 

當我嘗試部署所有到Heroku,我的應用程序崩潰,我得到「應用程序錯誤」....請幫助我,我是一個Ruby on Rails新手,謝謝。

+0

我們可以看到您的routes.rb文件嗎? – Ursus

+0

煉油廠的郵政編碼:: PagesController – Ruslan

+0

是的,我編輯的帖子,你可以看到那裏。 – iFurniture

回答

0

我可以解決只是運行CMD

bundle exec rake db:seed 

感謝您的幫助的問題。

0

我會檢查你的before_action :error_404, :unless => :current_user_can_view_page?也許暫時刪除該代碼,看看它是否可以加載,如果有的話,那麼很可能是該方法設置不正確。

+0

嗨,不要工作刪除代碼,我得到同樣的問題:c – iFurniture

1

@iFurniture,問題就在這裏,你的 'fallback_to_404' 設置爲true, 所以你總是得到error_404

def find_page(fallback_to_404 = true) 
    @page ||= ... 
    @page || (error_404 if fallback_to_404) 
end 

我建議你做這樣的:

def find_page(fallback_to_404: false) 
    error_404 if fallback_to_404 
    @page ||= ... 
    @page || (error_404 if fallback_to_404) 
end 

所以fallback_to_404將默認爲假,如果你想設置它的真實,就這樣稱呼它

find_page(fallback_to_404: true) 

Ruby 2 Keyword Arguments

關於這一點:

@page || (error_404 if fallback_to_404) 

可能是你想要的嗎?

fallback_to_404 ? error_404 : @page 

看起來更好。

+0

這改變了網絡,但現在我得到了這個問題.. ''未定義的方法'活着嗎?' for nil:NilClass Rails。root:C:/ Sites/ifurniture 應用程序跟蹤|框架跟蹤|完整跟蹤 app/controllers/refinery/pages_controller.rb:66:在'current_user_can_view_page?''' – iFurniture

+0

取決於頁面爲零時發生了什麼? 'current_user_can_vi ew_page?'方法的邏輯是什麼。如果你只是想安全地通過這個條件,那就像'page && page.live? || ...' –

+0

當頁面爲零我想去404找不到,但「家」不是零,並繼續給我404沒有找到。 – iFurniture

相關問題