0

我刚刚将我的站点从本地 webrick 服务器部署到了真实服务器,

http://92.51.243.6/

我很高兴我自己设法部署了它,但是当我意识到我的大部分链接都不起作用时,这种感觉很快就消失了。(我知道 Facebook 的问题,这真的是我现在关心的链接) - 关于我们、常见问题解答、联系我们,以及在“注册”页面上,链接“条款和条件”给出了错误,“我“很抱歉,但出了点问题”

我用代码建立了链接:

 <div id = "menu">
      <ul id = "home_page_links">
        <li><%= link_to "Home",about_us_path, :remote => true %></li>
        <li><%= link_to "About Us",about_us_path, :remote => true  %></li>
        <li><%= link_to "FAQ", faq_path, :remote => true  %></li>
        <li><%= link_to "Contact Us", contact_us_path, :remote => true  %></li>
      </ul>
    </div>

在 WEBrick 上,所有链接在本地模式下都可以正常工作。在我的生产日志中,我收到了很多消息,例如:

Started GET "/contact_us" for 77.24.238.174 at Thu May 30 00:11:08 +0100 2013
Processing by StaticPagesController#contact_us as */*
  Rendered static_pages/contact_us.html.erb within layouts/application (0.0ms)
Completed 500 Internal Server Error in 4ms

ActionView::Template::Error (ie.css isn't precompiled):
    12:   <%= javascript_include_tag "application" %>
    13:   <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
    14:   <!--[if lt IE 9]>
    15:     <%= stylesheet_link_tag 'ie', :media => 'all' %>
    16:     <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    17:   <![endif]-->
    18: </head>
  app/views/layouts/application.html.erb:15:in `_app_views_layouts_application_html_erb__922519344_37417300'

这是我的 routes.rb 文件:

QuestionnaireSite::Application.routes.draw do

  get "about_us", :to => "static_pages#about_us"
  get "contact_us", :to => "static_pages#contact_us"
  get "faq", :to => "static_pages#faq"
  get "competition_terms", :to => "static_pages#competition_terms"
  get "t_and_c", :to => "static_pages#terms_and_conditions"
  # get "user", :to => @user(current_user)
  get "render_index_review", :to => "reviews#render_index"

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

  devise_scope :user do
    delete "sign_out", :to => "devise/sessions#destroy"
    get "login", :to => "devise/sessions#new"
  end

  devise_for :admins, :path => "admin", :controllers => { :sessions => "admin/sessions" }

  get "home/index"
  get "home/map", :as  => :map
  post "home/update_address", :as  => :update_address
  match "canvas" => "canvas#index"

  match "/contacts/:importer/callback" => "email_invites#contacts_callback", :as => :contacts_callback
  match "/contacts/failure" => "email_invites#contacts_callback_failure", :as => :contacts_callback_failure
  mount Resque::Server, :at => "/resque"

  get "find" => 'search#index', :as => :find

  resources :search do
    collection do
      match :change_range
    end
  end

  resources :reviews do
    member do
      get :repost, :reject
    end
  end
  resources :users do
    member do
      get :following_followers, :address_toggle
    end
  end
  resources :friend_relations, :only => [:create, :destroy]
  resources :email_invites do
    collection do
      get :confirm
      post :invitation_form
      post :outlook_import
    end
  end

  root :to => "home#index"

  namespace :admin do
    resource :profile, :only => [:edit, :update]

    resources :users
    resources :categories
    resources :reviews

    root :to => "users#index"
  end

还有我的 scripts.js 文件,它做 ajax 的东西:

//I want to load content into the '.page-content' class, with ajax

var ajax_loaded = (function(response) {        

  $(".page-content")

  .html($(response).filter(".page-content"));       

  $(".page-content .ajax").on("click",ajax_load); 



   });


//the function below is called by links that are described 
//with the class 'ajax', or are in the div 'menu' 

var history = [];                 

// var current_url_method;               

var ajax_load = (function(e) {  


  //console.log('load ajax on clicks. This always works.');         
  e.preventDefault();               


  history.push(this);               
  var url =$(this).attr("href");          
  var method = $(this).attr("data-method");   

  // if (current_url_method != url + method) {   
  //   console.log('You got to the url + method part. But sometimes I dont get this far.'); 
  //   current_url_method = url + method;      

  $.ajax({                  
    url: url,               
    type: method,  
    // async: false,                       
    success: ajax_loaded

    // $('html, body').animate({ scrollTop: 0 }, 0);       
  });
   // }

 });


//monitor for clicks from menu div, or with
//the ajax class, or the 'submit button'.
//why the trigger?

$(document).on("ready", function(){
$("#menu a").on("click",ajax_load);
$(".ajax").on("click",ajax_load);
$("#menu a.main").trigger("click");


});

任何帮助将不胜感激,谢谢。

4

3 回答 3

1

好的,我将逐步向您解释如何在 Rails 中执行 ajax 请求,至少这是我的做法,我不会强迫您这样做。

1.链接和路径

<%= link_to "FAQ", faq_path, :remote => true  %>

设置remote: true为链接意味着请求将被视为 ajax。

路径faq_path意味着你已经routes.rb定义了它(如你的情况 get "faq", :to => "static_pages#faq":)

2.控制器和动作

拥有你的路线get "faq", :to => "static_pages#faq"意味着你有一个被称为控制器static_pages和一个被称为内部的动作faq

def faq
  may be some code here but not necessary for static pages
end

3.意见和js.erb

就目前而言,您可能有一个faq.html.erbinapp/views/static_pages/并且此页面适用于 html 请求,但是当我们作为 ajax 执行此操作时,它会查找faq.js.erb并且这是您执行 javascript 操作的地方。

首先,我会将您的faq.html.erb内容移动到部分内容_faq_content.html.erb中,并且faq.html.erb我只会将其呈现为部分 <%= render 'faq_content' %>,因为我们将使用相同的部分内容以防出现 html 请求(对于禁用 js 的用户)在浏览器中)

现在我承认,当点击 faq 链接时,您希望将page-contentdiv 内的内容替换为您的 faq 页面的内容。为此,在您的faq.js.erb(如果没有,请创建一个)中,您将编写:

$('.page-content').html('<%= j render('faq_content') %>');

如果需要,您可以在此处添加更多 js 代码,例如使用下划线为菜单中的链接设置样式,或者您可以对该页面上存在的任何元素执行任何操作。

点击常见问题链接内容后,<div class="page-content"></div>将替换为常见问题部分内容的内容。

我建议您在尝试我的方法时删除(注释)您的 js 代码,顺便说一下,Chrome 在单击链接时会显示错误:

GET http://92.51.243.6/about_us 500 (Internal Server Error) application-
GET http://92.51.243.6/faq 500 (Internal Server Error) application-
GET http://92.51.243.6/contact_us 500 (Internal Server Error) 

所以你最好在尝试我的教程时删除你的 js :) 只是为了确保不会有冲突。如果你做的很好,你应该为你的静态页面获得一个 ajax 渲染。如果您对此有任何疑问,请告诉我。祝你好运。

于 2013-05-30T06:43:59.230 回答
1

您是否在生产环境中部署您的应用程序?

错误是: ActionView::Template::Error (ie.css 未预编译):

这意味着您需要预编译所有资产。请运行此命令并重新启动您的服务器。

bundle install
bundle exec rake assets:clean
bundle exec rake assets:precompile

有关更多脱轨,请按照 rails deploy guide 中所述的这些基本步骤进行操作。 http://guides.rubyonrails.org/asset_pipeline.html#in-production

于 2013-05-30T11:28:40.843 回答
0

您是否在生产环境中部署您的应用程序?

错误是:

ActionView::Template::Error (ie.css 未预编译):

这意味着您需要预编译所有资产。请运行此命令并重新启动您的服务器。

bundle exec rake assets:precompile
于 2020-11-17T11:13:04.403 回答