Почему я получаю «Ошибка 404 не найдена» в Ruby on Rails?

Это моя проблема: когда я запускаю команду rails serverи перехожу на localhost: 3000, я получаю страницу «Ошибка 404 не найдена», поэтому я пытаюсь поставить localhost: 3000 / home, потому что это представление, но проблемы продолжаются. Это журнал в CMD ..

C:Sitesifurniture>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, спасибо.

ruby-on-rails,ruby,heroku,

0

Ответов: 3


1

@iMurniture, проблема здесь, ваш «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 будет ложным по умолчанию, и если вы хотите установить его true, просто назовите его так

find_page(fallback_to_404: true)

Аргументы ключевого слова Ruby 2

Об этом:

@page || (error_404 if fallback_to_404)

Может быть, вы хотите?

fallback_to_404 ? error_404 : @page

Смотри лучше.


0

Я бы проверял, before_action :error_404, :unless => :current_user_can_view_page?может быть, убрать этот код на время, чтобы проверить, может ли он загрузиться, если это так, есть хороший шанс, что метод настроен неправильно.


0 принят

я могу решить проблему, просто запустив CMD

bundle exec rake db:seed

Спасибо за вашу помощь.

рубин-на-рельсы, рубин, Heroku,
Похожие вопросы