为什么我的链接不起作用?

时间:2013-05-29 22:59:21

标签: ruby-on-rails git deployment

我刚将我的网站从本地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");


});

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

3 个答案:

答案 0 :(得分: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.erb中有一个app/views/static_pages/,这个页面适用于html请求,但是当我们这样做ajax时,它会查找faq.js.erb,这就是你做javascript的事情。

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

现在我要承认,当点击常见问题链接时,您想要将page-content div内的内容替换为faq页面的内容。为此,在您的faq.js.erb(如果您没有创建一个)中,您将写下:

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

你可以在这里添加更多js代码,如果你想要和需要它,例如在菜单中用下划线设置链接的样式,或者你可以对该页面上的任何元素做任何事情。

点击faq链接后,<div class="page-content"></div>的内容将与faq部分内容的内容重复。

我建议您在尝试我的方法时删除(评论)您的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渲染。如果您对此有疑问,请告诉我。祝你好运。

答案 1 :(得分:1)

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

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

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

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

如果出现更多脱轨,请按照rails部署指南中的说明执行这些基本步骤。 http://guides.rubyonrails.org/asset_pipeline.html#in-production

答案 2 :(得分:-1)

您是否要在生产环境中部署应用?

错误是:

ActionView :: Template :: Error(即未预先编译CSS):

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

bundle exec rake assets:precompile