Ruby on rails 带有RackFilter和资源的Rails

Ruby on rails 带有RackFilter和资源的Rails,ruby-on-rails,ruby-on-rails-3.2,asset-pipeline,rack,jrubyonrails,Ruby On Rails,Ruby On Rails 3.2,Asset Pipeline,Rack,Jrubyonrails,我在使用自定义RackFilter设置时遇到问题,并且无法在生产中正确定位或利用rake:precompile函数。 我的环境如下: jruby 1.7.3 Rails 3.2.12 <filter-mapping> <filter-name>RackFilter</filter-name> <url-pattern>/r/*</url-pattern> </filter-mapping> 我使用的机架筛

我在使用自定义RackFilter设置时遇到问题,并且无法在生产中正确定位或利用rake:precompile函数。 我的环境如下:

jruby 1.7.3
Rails 3.2.12
<filter-mapping>
    <filter-name>RackFilter</filter-name>
    <url-pattern>/r/*</url-pattern>
</filter-mapping>
我使用的机架筛选器映射如下所示:

jruby 1.7.3
Rails 3.2.12
<filter-mapping>
    <filter-name>RackFilter</filter-name>
    <url-pattern>/r/*</url-pattern>
</filter-mapping>
所有这些在开发模式下都可以正常工作。当我尝试在生产模式下运行应用程序时,问题就开始了。执行资产:预编译时,我的资产目录结构如下所示:

/public/r/assets
当我尝试运行应用程序时,会出现以下错误:

ActionView::Template::Error (application.css isn't precompiled):
[WARN] 404 - GET /r/assets/application-3b09aaf17ec25843ede11b1160ca46ab.css
这为我指明了应用程序无法正确定位manifest.yml文件的方向,因此我将以下内容添加到production.rb中:

config.assets.manifest=Rails.root.join(“public/r/assets”)

然后我得到以下错误:

ActionView::Template::Error (application.css isn't precompiled):
[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

所以在这一点上,我的想法已经没有了,可以使用任何建议或想法。多谢各位

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

像这样:

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

与此相反:

战争
-META-INF
-WEB-INF
--公共

---assets

当您执行一个
bundle exec-rake-assets:precompile
时,它不应该在另一个目录中创建目录。我认为您的公共目录中应该有
public/assets
。您还尝试过做
rake资产:precompilerails\u ENV=production
。同样要确定的是,在您的production.rb中是否将以下设置为
true
-
config.assets.compile=true
?感谢您的快速响应@David。我已将我的资产文件夹移动到public/assets而不是public/r/assets中。我还将production.rb中的配置更改为使用config.assets.compile=true,不过,我一开始不想更改此设置,因为据我所知,这会降低性能。我现在得到一个错误:ActionView::Template::error(要导入的文件找不到或无法读取:foundation/foundation global。因此,我正在尽最大努力解决此问题,以确定您的解决方案是否有效。谢谢!此外,我相信assets:precompile正在公开/r/assets目录结构,因为我的config.assets.prefix=“/r/assets”,这是必需的,因为我使用的是“/r/*”@David的rackfilter,所以如果您临时注释掉
config.assets.paths,我将使用config.assets.paths添加所有必需的资产