0

伙计们,我一直在关注 ruby​​ 教程,在这一步中,我正在尝试向页面添加一些 CSS。

ActionController::RoutingError (No route matches [GET] "/assets/blueprint/print.css"):

我相信我的 routes.rb 文件搞砸了:

FirstApp::Application.routes.draw do
  get "pages/home"
  get "pages/contact"
  get "pages/about"
  root :to => "home#index"

application.html.erb 文件:

<!DOCTYPE html>
<html>
<head>
    <title><%= title %></title>


    <%= csrf_meta_tags %>
    <%= stylesheet_link_tag 'blueprint/screen', :media => 'screen' %>
    <%= stylesheet_link_tag 'blueprint/print', :media => 'print' %>
</head>
<body>

<%= yield %>

</body>
</html>

服务器上的目录结构:

first_app% ls public 
404.html  422.html  500.html  downloads  favicon.ico  index.html.backup  master.zip  robots.txt  stylesheets

[vasiliy@vbweb]~/ruby/first_app% ls public/stylesheets 
blueprint

[vasiliy@vbweb]~/ruby/first_app% ls public/stylesheets/blueprint 
ie.css  plugins  print.css  screen.css  src
4

2 回答 2

2

您应该检查您正在遵循的教程,但似乎您遵循的是稍旧的教程(在 Rails 3.1 中添加资产管道之前)

所以事情有点不同。

现在预计样式表将存在于app/assets/stylesheets

如果您只是移动blueprint/screen.cssblueprint/print.css进入该目录,它应该开始工作。


但是......您可能想看看资产管道是如何工作的,因为它非常酷。

看看,application.css你会看到几行像

/*
*= require_tree .
*= require_self
*/

这将需要样式表目录中的所有文件,因此您只需一行stylesheet_link_tag :application即可完成所有文件。

但是,这不会执行您尝试使用的打印/屏幕媒体设置。

于 2013-01-25T00:29:26.417 回答
1

我认为您的路线文件很好。

stylesheet_link_tag 引用是 Rails 的“视图助手”,它为您提供位于 assets/ 目录下的资产的有效路径。这允许您利用 Rails“资产管道”(值得谷歌搜索),它将连接、缩小和压缩生产中的所有 JS 和 CSS 资产。另一方面,在开发中,它会将它们保留为单独的资产,以便您可以调试事物。

public/ 文件夹不包含 Asset Pipeline 资产 - 相反,这些只是被推到 webroot 下的文件。这些可以照常引用:

<link rel="stylesheet" href="/blueprint/print">

但是,您几乎肯定希望将它们放入 app/assets 目录,以便在生产中正确处理它们。我猜 stylesheet_link_tag 用来引用 href='application',对吧?因此,将您的 css 放在 assets/stylesheets 下,并仔细检查 assets/stylesheets/application.css 是否为“require_tree”或类似内容。然后,如果您摆脱这些 stylesheet_link_tag 引用并将它们替换为原始引用,则应该没问题。

于 2013-01-25T00:29:20.083 回答