2013-05-29 4 views
0

Я просто развернут мой сайт из моего локального сервера WEBrick к реальному серверу,Почему мои ссылки не работают?

http://92.51.243.6/ 

Я был рад, мне удалось развернуть его сам, но быстро исчез по реализации большинства моих ссылок не работают. (Я знаю о проблеме Facebook, это действительно те ссылки, о которых я сейчас беспокоюсь) - О нас, FAQ, Контакты и на странице «Зарегистрироваться», где ссылка «Условия использования» дает ошибку: «Я жаль, но что-то пошло не так "

Я сделал мои ссылки с кодом:

<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, который делает вещи АЯКСА :

//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"); 


}); 

Любая помощь будет оценена, спасибо.

+1

Ничего в файле 'production.log' или каких-либо файлов протокола HTTP? – lurker

+0

Буду признателен, если вы предоставите нам дополнительную информацию о том, как вы сделали свои ссылки. – Rapture

+0

Привет, я не знал о production.log до сих пор (новый для развертывания). Что делает production.log, точно? Я вижу, что в терминале это изменяется, когда я нажимаю на мои ссылки. Я отредактировал мой вопрос выше с одним из фрагментов кода из production.log. Как я могу исправить внутреннюю ошибку сервера? Как я могу предварительно скомпилировать ie.css? Благодарю. – CHarris

ответ

1

ОК, я объясню вам шаг за шагом, как выполнить запрос 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

, как сейчас вы, вероятно, в app/views/static_pages/ в faq.html.erb и эта страница будет работать на HTML запросов, но, как мы делаем это как AJAX он будет искать faq.js.erb и это, где вы делать javascript вещи.

Во-первых, я бы переместить faq.html.erb содержимое в частичном _faq_content.html.erb и в faq.html.erb я буду только сделать его в виде частичной <% = оказывают «faq_content»%>, потому что мы будем использовать те же парциальное в случае будет запрос HTML (для пользователей, у которых отключен js в браузерах)

Теперь я просто признаю, что при нажатии ссылки faq вы хотите заменить содержимое внутри div page-content содержимым вашей страницы faq.Для этого, в вашем faq.js.erb (создать, если вы не имеете его) вы будете писать:

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

вы можете добавить больше JS код здесь, если вы хотите, и нужно, как для Exemple установить стиль для ссылок в меню с подчеркиванием или вы можете делать что угодно с любым элементом, присутствующим на этой странице.

после нажатия на ссылку ссылки 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 для ваших статических страниц. Дайте мне знать, если у вас есть проблемы с этим. Удачи.

+0

Приветствия rmagnum, спасибо за вашу любезную помощь. заглянет в него в ближайшее время. Это, безусловно, отличается от ajax-метода, о котором я думал! Если он работает, то он намного чище и короче. Может возникнуть проблема с кнопками «Отправить», но я буду беспокоиться об этом, когда приду к нему. Я отметил его 1, и если он сработает, я приму свой ответ. – CHarris

+1

ничего сложного с кнопками отправки, вы добавите remote: true для формы, и действие, которое вы делаете в этой форме, будет работать с ajax так же, как и для ссылок, например, если вы создаете пользовательскую форму, <% = form_for @user, remote: true do | f | %><% = f.email_field: email, placeholder: «Ваш адрес электронной почты»%><% end %>, при этом действие create в контроллере пользователей будет отвечать js, значит вам нужно будет иметь приложение/views/users/create.js .erb и в нем вы добавите необходимые js. Но, как вы сказали, вы будете беспокоиться об этом, когда сможете добраться до него. – rmagnum2002

1

Вы развертываете свое приложение в производственной среде?

Ошибка: ActionView :: Template :: Ошибка (ie.css не прекомпилирована):

Это означает, что вам нужно перекомпилировать все свои активы. Запустите эту команду и перезапустите сервер.

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

для более суровых работ, пожалуйста, выполните следующие основные шаги, как указано в руководстве по разводке рельсов. http://guides.rubyonrails.org/asset_pipeline.html#in-production

+0

спасибо за подсказку, но не работал, как мне бы хотелось. Кто-то сказал положить * = require_tree в application.css.scss и перераспределить, поэтому я дам это. – CHarris

+0

* = require_tree добавит каждый файл css. Я думал, что вы написали это в файле appliation.css.scss. –

+0

Я унаследовал этот проект рельсов от кого-то другого. И я, конечно, не специалист по rails.But в моем файле application.css.scss я вижу * = требуется для каждого отдельного файла scss в той же папке, кроме ie.css.scss. Может ли это быть проблема? Я имею в виду, просто добавьте * = require ie и redeploy? – CHarris

Смежные вопросы