相关疑难解决方法(0)

为什么Rails不会找到我的资产?

在生产模式下,rails似乎无法从资产管道中找到任何预编译资产.

我在CentOS上使用RVM运行的rails 3.2.0和ruby 1.9.3.没有其他Web服务器与此应用程序一起运行.该应用程序最近才更新为使用资产管道,因为它最初是一个rails 3.0应用程序.

跑完之后

rake assets:clean
rake assets:precompile
Run Code Online (Sandbox Code Playgroud)

正如我所料,我看到公共/资产中的哈希内容.文件末尾的哈希值与我在页面源中看到的哈希值相匹配.

但是在运行时,这是我看到Rails尝试提供的每个资产的内容:

Started GET "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" for 75.149.58.169 at 2012-03-14 11:42:43 -0700

ActionController::RoutingError (No route matches [GET] "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"):
Run Code Online (Sandbox Code Playgroud)

我不是指每个资产所在的文件夹; 所有对资产的引用都是这样的:

//css:
.class {
  background: url(asset.png) no-repeat;
}

//erb:
<%= image_tag "asset.png" %>
<%= link_to "page", :class => "class" %>
Run Code Online (Sandbox Code Playgroud)

production.rb中的资产管道相关设置:

config.serve_static_assets = false
config.assets.enabled = true
config.assets.compress = true
config.assets.debug = false
config.assets.compile = false
config.assets.digest = true
Run Code Online (Sandbox Code Playgroud)

最后,来自config/application.rb的资产设置:

config.assets.enabled = true
config.assets.version = '1.0'
Run Code Online (Sandbox Code Playgroud)

启动rails服务器进程的用户对公共/资产具有读,写和执行权限,因此我认为这不是权限问题.我错过了配置步骤吗?

编辑

我注意到没有错误声明资产没有预编译,因此我尝试通过在主机路径的末尾附加"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"来从网页访问样式表:

http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"
Run Code Online (Sandbox Code Playgroud)

这工作,样式表打开.

asset-pipeline ruby-on-rails-3.2

18
推荐指数
1
解决办法
1万
查看次数

"rake assets:precompile"的糟糕时间表现

运行:

bundle exec rake assets:precompile RAILS_ENV=production
Run Code Online (Sandbox Code Playgroud)

大约250kb的15个.js文件需要大约6分钟.它不应该花这么长时间吗?我看到"Microsoft基于控制台的脚本主机"在大部分时间里都处于平稳状态.

人们推荐/知道什么是可能的?有没有办法用Ruby-Racer或其他javascript V8引擎实现替换它?或者找出我的代码中导致时间长的问题?或者是其他东西?

javascript performance ruby-on-rails pre-compilation

5
推荐指数
1
解决办法
1471
查看次数