0

我遇到了使用自定义RackFilter设置并能够正确定位或利用rake的问题:生产中的预编译功能。 我的环境如下:使用RackFilter和资产的滑轨

jruby 1.7.3 
Rails 3.2.12 

的,我使用的机架过滤器映射如下:

<filter-mapping> 
    <filter-name>RackFilter</filter-name> 
    <url-pattern>/r/*</url-pattern> 
</filter-mapping> 

要利用资产管道,不使用预编译的发展,我添加以下内容application.rb

config.assets.prefix = "/r/assets" 

所有这些在开发模式下工作正常。当我尝试在生产模式下运行应用程序时,问题就开始了。当我做一个资产:预编译我的资产目录结构是这样的:

/public/r/assets 

,当我尝试和运行应用程序,我得到以下错误:

ActionView::Template::Error (application.css isn't precompiled): 

指向我的方向应用程序不能正确定位manifest.yml文件,所以我添加下面我production.rb:

config.assets.manifest = Rails.root.join( “公共/ R /资产”)

,然后我得到以下错误:

[WARN] 404 - GET /r/assets/application-3b09aaf17ec25843ede11b1160ca46ab.css 

我试图改变我的production.rb包括:

config.assets.prefix = "public/r/assets" 

但仍获得

[WARN] 404 - GET /public/r/assets/application-3b09aaf17ec25843ede11b1160ca46ab.css 

所以在这一点上我我正在用尽想法,可以使用任何建议或想法。非常感谢你!

+1

当你做一个bundle exec rake assets:precompile时,它不应该在另一个目录中创建一个目录。我相信你应该在你的公共目录中有'public/assets'。你也尝试过'rake资产:预编译RAILS_ENV = production'。另外可以肯定的是,您的production.rb中的以下设置为'true' - 'config.assets.compile = true'? – David 2013-03-20 15:03:54

+0

感谢您的快速回复@David。我将我的资产文件夹移至公共/资产而不是公共/资产。我也在我的production.rb中更改了配置,以使用config.assets.compile = true,但是,我并不想首先更改此设置,因为从我读过的内容来看,这确实会降低性能。我现在得到一个错误:ActionView :: Template :: Error(File to import not found or unreadable:foundation/foundation-global。因此我正在尽最大努力通过这个来确定你的解决方案是否能够工作。谢谢! – 2013-03-20 15:32:51

+0

另外,我相信资产:precompile正在制作public/r/assets目录结构,因为我的config.assets.prefix =“/ r/assets”,这是必需的,因为我使用的机架过滤器是“ r/*“ – 2013-03-20 15:40:22

回答

0

问题在于public/assets目录需要位于war目录的根目录中,以便tomcat能够找到资产。所以,现在的目录结构看起来

像这样:

战争
- 资产
- META-INF
- WEB-INF

取而代之的是:

战争
- META-INF
- WEB-INF
- - public
- - - 资产