我的问题类似于这个Rails 3.2资产pipe道与乘客无尽的错误,除了当我尝试去实际去
<link href="/assets/application-eed7996ee9017637f923133371ab3e92.css" media="all" rel="stylesheet" type="text/css" />
我得到了404.这是我不明白的东西。 它正在/ assets /中查看,但是当我查看已部署的代码时,资产只在/ public / assets中,这实际上是/ var / www / myapp / shared / assets的符号链接。 那么世界上有什么负责告诉应用程序,看着/资产会产生正确的结果?
我正在使用Rails 3.2.0,ruby-1.9.3-p125,部署到Ubuntu,Apache和Thin。
我应该澄清:我的资产确实部署到服务器。 一切工作都很好,直到他们需要服务,在这种情况下production.log告诉我,它正在寻找/assets/application-eed7996ee9017637f923133371ab3e92.css,这是404的。
Apache .htaccess vs httpd – 真的很重要吗?
文件不存在c:/wamp/www/favicon.ico在apache error_log
使用Mod_Rewrite将ROOT重写为另一个path
什么是“孩子pid 10708退出信号分割错误(11)”错误的根本原因?
如何使用Apache / mod_rewrite基于Accept-Language进行redirect
对于每一个请求,我的thin.log说
cache: [GET /] miss
和production.log说
ActionController::RoutingError (No route matches [GET] "/assets/application-abecf2e096af9ee80697fd49e79a55e7.js"):
更新 @Brandan感谢您的帮助。 我的资产确实在RAILS_ROOT/public/assets 。 我把它放在我的Apache vhost文件中:
DocumentRoot /var/rails/myappname/current/public RewriteEngine On XSendFile On XSendFilePath /var/rails/myappname #not even sure if this line is needed <LocationMatch "^/assets/.*$"> Header unset ETag FileETag None ExpiresActive On ExpiresDefault "access plus 1 year" </LocationMatch>
我的RAILS_ROOT / config / environments / production.rb设置:
config.cache_classes = true config.consider_all_requests_local = false config.action_controller.perform_caching = true config.serve_static_assets = false config.assets.compress = true config.assets.compile = false config.assets.digest = true config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
使用PHP从本地运行的Apache Web服务器启动X应用程序
如何在Linux / var / www中设置权限以允许从PHP-Apache自动覆盖
Apache RewriteMap用于防止直接访问文件
Mod重写500错误更正
我已经有这个问题好几天了。 以为这是一个capistrano或红宝石版本的问题,但我很确定它是权限有关。
我的配置和你的配置差不多,虽然我也在使用Unicorn。
这是我做的排序:
暂时删除以下部分,因为我认为这是造成问题的故障排除:
<LocationMatch "^/assets/.*$"> Header unset ETag FileETag None ExpiresActive On ExpiresDefault "access plus 1 year" </LocationMatch>
也许所有的工作,然后把它加回来。我不认为这是问题的原因,但是当诊断这样的事情时,最好尽可能地去除找到罪魁祸首。
在公共目录中运行chown -R xxx.xxx(将xxx替换为您的应用程序用户或Web用户)。 一旦我这样做,CSS再次出现。
(我做了什么,但也许不是必需的)你可能也想在没有上限的地方安装。 以防万一有问题。 这也为我工作。
完全清除tmp / cache和public / *以防万一。
重启你的Apache服务器几次。
你可以看到我的conf的一个主意。 这里
从Apache配置中删除以下行。
ProxyPass / balancer://thinservers/ ProxyPassReverse / balancer://thinservers/
答案来自In Rails,我应该启用serve_static_assets吗? 。
通常情况下,您的资产只能存在于已部署应用程序的/public/assets中。
应该配置Apache以便其DocumentRoot是您的RAILS_ROOT/public 。 然后它将提供RAILS_ROOT/public/assets/whatever.css http://example.com/assets/whatever.css ,永远不会通过Rails获取静态资产。
您是否预先编译了资产,是否重新启动了应用程序? 有时候,Rails期望你的资产的编译版本比目前部署的更旧/更新。
尝试从您的apache /瘦配置中删除ProxyPass和ProxyPassReverse指令。 您的重写规则中的P标志已经在执行您想要的代理通行证。
有关更多信息,请参阅http://httpd.apache.org/docs/2.0/mod/mod_proxy.html 。
Passanger知道它的RoR应用程序,因为有一个config.ru文件。
由于错误的权限,您报告的错误也发生在我身上。 Apache无法提供assets内的文件,但能够发送public/
在我的情况下,我使用capistrano,所以assets是shared/public/assets的符号链接。
我做的是:
chmod -R o+x shared/
列出和访问目录需要x权限。 之后,它的工作。 你必须确保assets对其他人有+ x
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。