Rails 3.2资产管道与Thin和Apache,没有找到资产

Del*_*ero 9 apache ruby-on-rails thin ruby-on-rails-3 asset-pipeline

我的问题类似于这个带有乘客无尽错误的Rails 3.2资产管道,除了当我尝试实际去的时候

<link href="/assets/application-eed7996ee9017637f923133371ab3e92.css" media="all" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

我得到了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的.

对于每个请求,我的thin.log

cache: [GET /] miss
Run Code Online (Sandbox Code Playgroud)

production.log

ActionController::RoutingError (No route matches [GET] "/assets/application-abecf2e096af9ee80697fd49e79a55e7.js"):
Run Code Online (Sandbox Code Playgroud)

更新 @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>
Run Code Online (Sandbox Code Playgroud)

我的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
Run Code Online (Sandbox Code Playgroud)

sim*_*ley 2

我已经有这个问题好几天了。认为这是 capistrano 或 ruby​​ 版本的问题,但我很确定它也与权限相关。

尽管我也使用 Unicorn,但我的配置与您的配置几乎相同。

这是我所做的排序:

  1. 暂时删除以下部分,因为我认为这导致了故障排除问题:

     <LocationMatch "^/assets/.*$">
      Header unset ETag
        FileETag None
        ExpiresActive On
        ExpiresDefault "access plus 1 year"
      </LocationMatch>
    
    Run Code Online (Sandbox Code Playgroud)

也许让一切正常工作,然后将其重新添加回去。我不认为这是问题的原因,但是,在诊断此类问题时,最好尽可能删除以找到罪魁祸首。

  1. 在公共目录上运行 chown -R xxx.xxx(将 xxx 替换为您的应用程序用户或 Web 用户)。当我这样做时,css 又出现了。

  2. (我做了什么,但可能不是必需的)您可能还想在没有上限的情况下进行本地安装。以防万一出现问题。这对我也有用。

  3. 完全清除 tmp/cache 和 public/* 以防万一。

  4. 重新启动您的 apache 服务器几次。

你可以看到我的会议要点。这里