我的问题与这个类似:Rails 3.2 Asset Pipeline with Passenger Endless Errors,但当我尝试实际访问时,出现了无法加载应用程序的错误。
我得到了一个404错误。 这里有一件我不理解的事情。 它正在寻找/assets/,但是当我查看已部署的代码时,assets仅在/public/assets中,这实际上是指向/var/www/myapp/shared/assets的符号链接。 那么是什么让应用程序知道在/assets中查找会产生正确的结果呢?
我正在使用Rails 3.2.0、ruby-1.9.3-p125,部署到Ubuntu、Apache和Thin。
我需要澄清一下:我的资产确实部署到了服务器上。 一切正常工作正常,直到它们需要被服务,这时production.log告诉我它们正在寻找/assets/application-eed7996ee9017637f923133371ab3e92.css,而这会导致404错误。
对于每个请求,我的thin.log都会说:
<link href="/assets/application-eed7996ee9017637f923133371ab3e92.css" media="all" rel="stylesheet" type="text/css" />
我得到了一个404错误。 这里有一件我不理解的事情。 它正在寻找/assets/,但是当我查看已部署的代码时,assets仅在/public/assets中,这实际上是指向/var/www/myapp/shared/assets的符号链接。 那么是什么让应用程序知道在/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
并且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
<%= stylesheet_link_tag "application", :media => "all" %>
和<%= javascript_include_tag "application" %>
。 - DelPiero