rails app样式都失败了

时间:2016-02-05 22:07:00

标签: javascript ruby-on-rails

我有一个rails应用程序,我刚刚移动到服务器。某些配置已关闭,我的网页样式都没有加载。 rails控制台为每个资产(图像,javascript和样式表)提供:ActionController::RoutingError (No route matches [GET] "/images/search-icon.png")

这可能发生在哪里?

主要区别在于我正在以生产模式启动。

3 个答案:

答案 0 :(得分:2)

Rails 3.1带来了“资产管道”。随着它的推出,资产(图像,样式表,javascripts)的服务在生产中的工作方式不同。

在开发/测试环境中,rails应用程序通过基于配置进行连接,缩小和/或压缩来处理资产。

但是在生产中,预计资产会通过以下rake任务预编译到公共目录:

bundle exec rake assets:precompile

您的应用程序可以配置为由rails应用程序提供的资产,或者(按照惯例)由Web服务器提供。

看起来你没有预编译资产,这就是rails无法提供不存在的文件的原因。

访问Asset Pipeline了解详情。

答案 1 :(得分:1)

  

这可能发生在哪里

要添加答案,因为asset fingerprinting

每当您将应用推向生产时,默认情况下,Rails会将您的资产连接到您已定义的任何manifest files(通常为application.css):

  

sprockets用于指纹识别的技术是将内容的哈希值插入到名称中,通常在末尾。例如CSS文件global.css

global-908e25f4bf641868d8683022a5b62f54.css

这适用于您的imagejsfontvideo& audio资产。

在生产中调用图像资源时,Rails 可以访问public文件夹(precompilation将所有资产放入public/assets):

public/assets/images/search-icon[[hash]].png

在CSS中调用url("assets/images/search-icon.png"),或者显式引用应用的任何部分中的图片都无法正常工作。您必须引用预编译资产,这可以通过各种asset_path helpers(例如image-url)实现最佳效果:

#app/assets/stylesheets/application.scss
.class {
  background: image-url("search-icon.png");
}

答案 2 :(得分:0)

您未使用资产助手,因此路径与生产中生成的资产管道路径不匹配。阅读The Asset Pipeline Guide,尤其是Coding Links to Assets部分。

您还没有显示您用于生成路径的代码,因此我无法提供具体的解决方案,但上述链接包含有ERB的CSS信息以及你正在使用Sass模板。