¿Por qué mis enlaces no funcionan?

Acabo de implementar mi sitio desde mi server webrick local a un server real,

http://92.51.243.6/ 

Me alegré de haber logrado implementarlo solo, pero eso desapareció rápidamente al darme count de que la mayoría de mis enlaces no funcionan. (Sé sobre el problema de Facebook, en realidad son los enlaces que me preocupan ahora) – Acerca de nosotros, Preguntas frecuentes, Contáctenos, y en la página "Registrarse" donde el enlace "Términos y condiciones" da el error, "I Lo siento, pero algo salió mal

Hice mis enlaces con el código:

  <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> 

Todos los enlaces funcionan bien en modo local, en WEBrick. En mi log de producción recibo muchos posts, como:

 Started GET "/contact_us" for 77.24.238.174 at Thu May 30 00:11:08 +0100 2013 Processing by StaticPagesController#contact_us as */* Rendenetworking 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' 

Y aquí está mi file routes.rb:

 QuestionnairSite::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 

Y mi file scripts.js, que hace cosas 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"); }); 

Cualquier ayuda será apreciada, gracias.

ok, te explicaré paso a paso cómo hacer una request de ajax en Rails, al less esta es mi manera de hacerlo y no te estoy forzando a hacer lo mismo.

1. el enlace y la ruta

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

configuration remote: true a los enlaces significa que la request se tratará como ajax.

el path faq_path significa que lo tiene en routes.rb definido (como en su caso: get "faq", :to => "static_pages#faq" )

2. el controller y la acción

teniendo su ruta como get "faq", :to => "static_pages#faq" significa que usted tiene un controller llamado static_pages y una acción dentro llamada faq

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

3. las vistas y js.erb

por ahora es probable que tenga un faq.html.erb en la app/views/static_pages/ y esta página funcionará para las requestes html, pero como hacemos esto como ajax searchá faq.js.erb y aquí es donde lo hace las cosas javascript.

Primero, movería su contenido faq.html.erb a un _faq_content.html.erb parcial y en faq.html.erb . Solo lo presentaré como parcial <% = render 'faq_content'%>, porque utilizaremos el mismo parcial. en caso de que haya una request html (para usuarios que tienen js deshabilitado en los browseres)

ahora solo admitiré que onclick en el enlace faq desea replace el contenido dentro del div del contenido de la página con el contenido de su página de preguntas frecuentes. Para hacerlo, en tu faq.js.erb (crea uno si no lo tienes) escribirás:

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

puede agregar más código js aquí si lo desea y lo necesita, como por ejemplo para establecer el estilo de los enlaces en el menu con el subrayado o puede hacer cualquier cosa con cualquier elemento presente en esa página.

después de hacer clic en el contenido del enlace faq de <div class="page-content"></div> se responderá con el contenido del contenido parcial de faq.

Te aconsejo que elimines (comentes) tu código js cuando pruebes mi método; dicho sea de paso, Chrome muestra errores onclick en los enlaces:

 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) 

así que será mejor que elimines tu js mientras intentas con mi tutorial 🙂 solo para asegurarte de que no habrá conflictos. Si lo haces bien, deberías get un render de Ajax para tus páginas estáticas. Avíseme si tiene problemas con esto. Buena suerte.

¿Está implementando su aplicación en el entorno de producción?

El error es: ActionView :: Template :: Error (ie.css no está precomstackdo):

Esto significa que necesita precomstackr todos sus activos. Ejecute este command y reinicie su server.

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

para get más descarrilamientos, siga estos pasos básicos como se indica en la guía de deployment de Rails. http://guides.rubyonrails.org/asset_pipeline.html#in-production