我刚将我的网站从本地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");
});
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:1)
<强> 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.erb
和faq.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