最近配置production环境,找了好几份文档,从傻逼到苦逼~~终于配置成功~~@_@!!!

首先,先加载以下几个插件:

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'# Use jquery as the JavaScript library
gem 'jquery-rails' gem 'execjs'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks' # Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0'

接着修改config/environment/production.rb,部分代码如下:

  # Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_assets = true # Compress JavaScripts and CSS.
config.assets.compress = true
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass # Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false # Generate digests for assets URLs.
config.assets.digest = true

接着在config/application.rb中添加下面代码:

 1     config.assets.precompile << Proc.new do |path|
if path =~ /\.(css|js|scss|png|jpg|gif|json)\z/
full_path = Rails.application.assets.resolve(path).to_path
app_assets_path1 = Rails.root.join('app', 'assets').to_path
app_assets_path2 = Rails.root.join('public', 'assets').to_path
app_assets_path3 = Rails.root.join('vendor', 'assets').to_path if full_path.starts_with? app_assets_path1
true
else
if full_path.starts_with? app_assets_path2
true
else
if full_path.starts_with? app_assets_path3
true
else
false
end
end
end
end
end

如果有其他文件需要添加的,上面代码自行修改添加。

在app/assets/javascripts/application.js

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .

然后在开启服务器之前,在命令行输入 rake assets:precompile

Rails 会帮你把 assets 里的文件依照环境设定打包压缩放在 public/assets 目錄底下,所有的文件名称后会加入 MD5 的 fingerprinting 用來表示其內容供快取。

注:如果输入该命令行后发现无法加载css或js,或者是提示说.js文件已被加载,那么有可能是因为你的文件夹中还有别的application文件,里面的配置发生冲突。

接着开启服务器就可以了。。。

在配置过程中,由于存放在app/assets/images中的有些图片是被引用在css中的,而当你在命令行中运行了rake assets:percompile后,你会发现图片的文件名是被加密了,所以在css中无法找到图片,从而导致界面无法显示。

尝试过将图片路径进行修改,让它读取app/assets/images中的iphone.png,但是not working

会发现开启服务器后,在控制台那里可以看到读取不到图片的错误提示。而在public/assets中的图片由于文件名被加密,所以很难确定

后来由于自己很懒,就把要用到的图copy到public/assets中,上面贴的代码保持不变,然后就成功了。。。@_@|||

参考链接:

http://gogojimmy.net/2012/07/03/understand-assets-pipline/

http://ruby-china.org/topics/1415
http://ruby-china.org/topics/1414
http://ruby-china.org/topics/13216

ruby -- 进阶学习(十一)配置解决production环境下无法加载css或js的更多相关文章

  1. Django 学习笔记(三) --- HTML 模版加载 css、js、img 静态文件

    人生苦短 ~ Tips:仅适用于 Python 3+(反正差别不大,py2 改改也能用).因为据 Python 之父 Guido van Rossum 说会在 2020 年停止对 Python 2 的 ...

  2. github不能访问、加载css、js解决办法

    很奇怪,白天在公司还能正常访问github,晚上回来访问却有问题,表现症状是页面加载慢,并且页面样式明显错乱. 在chrome下用F12开发者工具一看,有2条css和2条js 404 了,猜想应该是g ...

  3. 在Heroku部署时,无法加载 css,js,图片资源解决办法

    解决方案: 首先查看Gemfile, 确保group :production do 里添加了 gem "rails_12factor", '0.0.2' 然后在本地执行 rails ...

  4. 解决Tomcat无法加载css和js等静态资源文件

    解决思路有两个 一是,你使用了Apache服务器,html不交给Tomcat处理,所以你找不到Html等静态资源,所以你先停掉阿帕奇,然后只用Tomcat猫试试. 二是,像我一样,使用了Jetty开发 ...

  5. github不能加载css、js解决办法

    很奇怪,上午在公司还能正常访问github,晚点访问却有问题,页面样式明显错乱. 在FireFox下用F12开发者工具一看,有2条css和2条js 404 了,猜想应该是github的DNS被GFW污 ...

  6. linux环境下pdo加载问题

    报错信息信息 PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php5/20121212/pdo_mysql.so ...

  7. ruby -- 进阶学习(九)定制错误跳转404和500

    在开发阶段,如果发生错误时,都会出现错误提示页面,比如:RecordNotFound之类的,虽然这些错误方便开发进行debug,但是等产品上线时,如果还是出现这些页面,对于用户来说是很不友好的. 所以 ...

  8. 项目总结10:通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题

    通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题 关键字 springboot热部署  ClassCastException异常 反射 ...

  9. RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理

    上一篇已经讲了Rabbitmq如何在Windows平台安装 不懂请移步: RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 一.理论 .net环境下,C#代码订阅 ...

随机推荐

  1. Hello.class所在路径下, 输入命令:java Hello.class,会出现什么结果,为什么?

    所在路径下, 输入命令:java Hello.class: 因为DOS没有规定路径,所有么有在默认路径下找到Hello.class文件,导致提示 错误: 找不到或无法加载主类 Hello.class.

  2. How Tomcat works — 七、tomcat发布webapp

    目录 什么叫发布 webapp发布方式 reload 总结 什么叫发布 发布就是让tomcat知道我们的程序在哪里,并根据我们的配置创建Context,进行初始化.启动,如下: 程序所在的位置 创建C ...

  3. Disable multi finger touch in my app

    http://stackoverflow.com/questions/12777435/disable-multi-finger-touch-in-my-app android:splitMotion ...

  4. ftp 命令

  5. jquery判断checkbox是否选中及改变checkbox状态(转)

    jquery判断checked的三种方法:.attr('checked):   //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false.prop('c ...

  6. Android Studio 快捷键 for mac

    Action Mac OS Win/Linux 打开文件 Cmd + shift + O   打开Class文件 Cmd + O   覆写方法 Ctrl + O   生成方法(重写构造.setter ...

  7. wdlinux 一键安装

    Linux系统(支持CentOS 6.X/7.X.RedHat 6.X.Ubuntu 12.04): ssh登录服务器,执行如下操作即可,需root用户身份安装 wget http://dl.wdli ...

  8. 【转】ASP.NET WEB API系列教程

    from: 西瓜小强 http://www.cnblogs.com/risk/category/406988.html ASP.NET Web API教程(六) 安全与身份认证 摘要: 在实际的项目应 ...

  9. Mac OS 下安装wget

    环境:  Mac OS X 10.9.4 1 下载源码 地址: http://ftp.gnu.org/gnu/wget/wget-1.9.tar.gz 2 解压安装 tar zxvf wget-1.9 ...

  10. xsocks 64位平台下编译问题小记

    1.src/common/public.h uint32_t lpParameter 改为 void* lpParameter; 2.SocksMgr.cpp DWORD WINAPI CSocksM ...