2011-10-07 67 views
3

当前正在开发一个项目,我们需要在各种静态html页面中为这些项目添加静态资源,这些资源可以随时为您“工作”。我们不能让任何人直接编辑html来为资源放置路径。我们需要它来简单地工作,以便将HTML +资源文件夹直接放置到/ public中,并且在生成内容时提供内容。Rails中的静态页面和资产3.1.1

当测试在生产这种行为,这是一个与错误,如不走:

ActionController::RoutingError (No route matches [GET] "/some_folder/some-image.png"): 

我认为这是什么,我从3.1.X的资产管道读出结果。

你如何改变路线,这些路线将直接送达?还是有一种保持这种精确行为的首选方法? (这最终将部署在Heroku上。)

添加一些细节如当前的言论还没有把我的问题在边缘的解决方案方面:

在目前的情况下我跑它直接在WEBrick rails s -e production上进行测试。在开发模式下,这确实工作正常;唯一的例外是production

我也运行在运行服务器在此之前: bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile --trace

当我居然试图在生产中加载网页,我看到下面的输出:

cache: [GET /] miss 
cache: [GET /test_files/index.css] miss 
cache: [GET /test_files/index.js] miss 
cache: [GET /test_files/logo.png] miss 
cache: [GET /test_files/background.png] miss 
cache: [GET /test_files/horizontal.png] miss 
cache: [GET /favicon.ico] miss 
+1

显然,在进一步审查production.rb时,我看到:“config.serve_static_assets = true”,默认设置为false时会引起webrick中遇到的问题。因此,将其设置为true时,它会正确提供文件。 – ylluminate

回答

3

经过production.rb的进一步审查,我看到:“config.serve_static_assets = true”,默认情况下设置为false会唤起webrick中遇到的问题。因此,将其设置为true时,它会正确提供文件。

从一些额外的阅读看来,也许Heroku也需要这个设置为false,这也是我们正在部署的环境。

感谢您的意见,但这似乎是现在采取的方法,如果这不是正确的答案,或者如果有更好的方法,我当然会感激任何进一步的输入。

2

铁轨3.1。 1预编译任务会创建非消解和消解文件名,因此您可以在静态文件中引用这些文件(同时仍在动态文件中具有摘要版本)。

唯一的问题是,如果您在资产目录上使用远期标题;没有消息的文件的更改将不会被仍具有副本的远程客户端选取,并且认为缓存仍然有效。

您可能需要查看一种方法,在部署过程中用正确的名称替换未消解的文件名。

如果你没有在目录中使用远远的标题,那么它没关系 - 你可以使用任何名称。

+0

在上面增加了一些额外的细节。 – ylluminate

1

如果您有/public/some_folder/some-image.png物理存在(无论您是手动复制它还是通过资产预编译生成),它必须工作。服务器(例如Apache)首先会检查请求的路径是否存在,如果它不会调用Ruby on Rails。

至于消化的文件名是关心有是关闭该功能的选项,但我不会建议,对于已经有人提到人在这里的原因。

您还可以将引用资产的文件放在app/assets文件夹中,并在最后添加.erb扩展名。然后你可以使用<%= asset_path ...%>该文件里面,所以没有人工编辑将是必要的。这甚至会工作,如果你已经对文件中的一些其他预处理,例如青菜 - style.css.scss.erb会工作。首先评估erb代码(为资产输入正确的文件名),然后运行sass编译器。

+0

在上面增加了一些额外的细节。 – ylluminate

2

对我来说,@ ylluminate的回答帮助:我已经改变了config.serve_static_assets选项设置为true在配置/环境/ production.rb文件并重新启动与

$rails server --environment=production 

和服务器现在它服务于压缩资产。

注意:我也预编译的资产

$bundle exec rake assets:precompile 

(称之为这种方式保证将用于choosen项目的耙版本,但我想用刚耙资产:预编译将工作99%的时间)

1

哦,看看sprockets-image-compressor宝石,只需将它添加到您的Gemfile,它也会自动压缩图像资产(无损地使用pngcrush和j pegoptim)......我不知道这颗宝石是否坚如磐石,但是从我见过的我喜欢它!

+1

哇,谢谢你! – ylluminate