Ruby on rails 3 Rails 3.1.1中的静态页面和资源

Ruby on rails 3 Rails 3.1.1中的静态页面和资源,ruby-on-rails-3,ruby-on-rails-3.1,asset-pipeline,Ruby On Rails 3,Ruby On Rails 3.1,Asset Pipeline,目前正在进行一个项目,我们需要为那些“正常工作”的页面添加各种静态html页面和静态资产。我们不能让任何人直接编辑html来放置资产的路径。我们需要它简单地工作,使html+资产文件夹直接放置到/public中,并在生成内容时提供内容 在生产环境中测试此行为时,不允许出现以下错误: ActionController::RoutingError (No route matches [GET] "/some_folder/some-image.png"): 我假设这是我从3.1.x的资产管道中读到

目前正在进行一个项目,我们需要为那些“正常工作”的页面添加各种静态html页面和静态资产。我们不能让任何人直接编辑html来放置资产的路径。我们需要它简单地工作,使html+资产文件夹直接放置到/public中,并在生成内容时提供内容

在生产环境中测试此行为时,不允许出现以下错误:

ActionController::RoutingError (No route matches [GET] "/some_folder/some-image.png"):
我假设这是我从3.1.x的资产管道中读到的结果

您如何改变路线,以便直接提供服务?还是有更好的方法来保持这种精确的行为?(最终将部署在heroku上。)

添加更多细节,因为当前的评论尚未将我的问题推向解决方案的边缘:

在我目前的场景中,我直接在WEBrick
rails s-e产品上运行它来测试它。在开发模式中,这确实可以正常工作;唯一的例外是
生产

在运行服务器之前,我还运行了以下操作:
bundle exec rake RAILS\u ENV=production RAILS\u 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

从Rails 3.1.1开始,预编译任务创建非摘要文件名和摘要文件名,因此您可以在静态文件中引用这些文件名(同时在动态文件中仍然具有摘要版本)

唯一的问题是,如果您在资产目录上使用远未来的标题;对未消化文件所做的更改不会被仍有副本且认为缓存仍然有效的远程客户端接收

您可能需要考虑一种方法,在部署过程中使用正确的名称替换非摘要文件名


如果不在目录中使用“遥远的未来”标题,则无所谓-您可以使用任何名称。

如果您实际存在/public/some_folder/some-image.png(无论您是手动复制的还是由资产预编译生成的),则它必须工作。服务器(例如Apache)将首先检查请求的路径是否存在于公共空间中,如果存在,它甚至不会调用RubyonRails

就摘要文件名而言,有一个关闭此功能的选项,但出于其他人已经提到的原因,我不建议这样做


您还可以将引用资产的文件放在app/assets文件夹中,并在末尾添加.erb扩展名。然后您可以在该文件中使用,因此无需手动编辑。即使您已经对文件进行了一些其他预处理,例如sass-style.css.scss.erb,这也可以工作。首先对erb代码进行评估(为资产输入正确的文件名),然后运行sass编译器。

进一步检查production.rb后,我发现:“config.service\u static\u assets=true”,默认情况下设置为false时会引发webrick遇到的问题。因此,当设置为true时,它会正确地提供文件

从一些额外的阅读来看,Heroku可能也需要将此设置为false,这就是我们要部署到的环境


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

对我来说@ylluminate的答案很有帮助:我在config/environments/production.rb文件中将config.service\u static\u assets选项更改为true,然后重新启动服务器与

$rails server --environment=production
现在,它服务于压缩资产

注意:我还使用

$bundle exec rake assets:precompile

(以这种方式调用rake确保将使用项目选择的rake版本,但我猜只使用rake资产:预编译将在99%的时间内工作)

哦,看看gem,只需将其添加到gem文件中,它也将自动压缩图像资产(使用pngcrush和jpegoptim无损压缩)…我不知道这块宝石是否坚如磐石,但从我所看到的来看,我喜欢它

在上面添加了一些额外的细节。在上面添加了一些额外的细节。显然,在进一步检查production.rb之后,我看到:“config.serve\u static\u assets=true”,当默认设置为false时,会引发webrick遇到的问题。因此,当设置为true时,它会正确地提供文件。