ActionDispatch::Static 在 Rails 生产环境中
ActionDispatch::Static in Rails production environment
我希望使用 ActionDispatch::Static
在 public 以外的目录中提供静态文件。它在开发中完美运行,但我似乎无法在生产中获得相同的结果。
我在 /var/www/mysite.com-static
中有我的静态文件。在初始化程序中,我添加了以下内容:
Rails.application.config.middleware.insert_after Rack::SendFile, ActionDispatch::Static, '/var/www/mysite.com-static'
rake middleware
的输出如下:
use Raven::Rack
use Rack::Sendfile
use ActionDispatch::Static
use Rack::Lock
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x00000005e61130>
use Rack::Runtime
...
为什么我在 /var/www/myapp.com-static 中请求的每个页面都会收到 404?
我最终解决了这个问题,在我的 Rails 应用程序的 config.ru
中添加了中间件。
require ::File.expand_path('../config/environment', __FILE__)
# Added the following line
use ActionDispatch::Static, '/var/www/myapp.com-static'
run Rails.application
这是有效的,因为我在中间件已经安装后加载的初始化程序中设置了 ActionDispatch::Static 的路径。如果我正确配置了我的加载顺序,Rails.application.config.middleware
也会起作用。
我希望使用 ActionDispatch::Static
在 public 以外的目录中提供静态文件。它在开发中完美运行,但我似乎无法在生产中获得相同的结果。
我在 /var/www/mysite.com-static
中有我的静态文件。在初始化程序中,我添加了以下内容:
Rails.application.config.middleware.insert_after Rack::SendFile, ActionDispatch::Static, '/var/www/mysite.com-static'
rake middleware
的输出如下:
use Raven::Rack
use Rack::Sendfile
use ActionDispatch::Static
use Rack::Lock
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x00000005e61130>
use Rack::Runtime
...
为什么我在 /var/www/myapp.com-static 中请求的每个页面都会收到 404?
我最终解决了这个问题,在我的 Rails 应用程序的 config.ru
中添加了中间件。
require ::File.expand_path('../config/environment', __FILE__)
# Added the following line
use ActionDispatch::Static, '/var/www/myapp.com-static'
run Rails.application
这是有效的,因为我在中间件已经安装后加载的初始化程序中设置了 ActionDispatch::Static 的路径。如果我正确配置了我的加载顺序,Rails.application.config.middleware
也会起作用。