【问题标题】:Assets not loaded for a mounted Sinatra app with thin and nginx未为使用 Thin 和 nginx 安装的 Sinatra 应用程序加载资产
【发布时间】:2012-01-17 11:51:55
【问题描述】:
我有一个简单的 Rails 应用程序,Resque 服务器安装在 routes.rb as
require 'resque/server'
require 'resque_scheduler'
MyApp::Application.routes.draw do
authenticate :user do
mount Resque::Server.new, :at => "/tasks"
end
...
...
在路由中安装了应用程序以使用基于设计的身份验证。然而,在生产环境中,不会为 Resque 服务器加载资产,而主 Rails 应用程序的资产会正确加载。
【问题讨论】:
标签:
ruby-on-rails-3
routes
sinatra
resque
【解决方案1】:
环顾四周后,这对我有用 nginx 和瘦:
require 'resque/server'
class SecuredResqueServer < Resque::Server
set :static, true
set :root, Resque::Server.root
end
路由文件如下所示:
require 'resque/server'
require 'resque_scheduler'
require './app/secured_resque_server'
MyApp::Application.routes.draw do
...
...
authenticate :user do
mount SecuredResqueServer.new, :at => "/tasks"
end
...
...
改变
config.action_dispatch.x_sendfile_header = "X-Sendfile"
在 production.rb 到
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
第三,在某些情况下,nginx为rails配置如下:
server{
...
...
location ~*\.(jpeg|jpg|gif|png|ico|css|bmp|js)$ {
root /PATH_TO_APP/public;
}
...
...
}
其中 PATH_TO_APP 是应用程序根目录的路径。此类位置声明可防止从任何其他位置为已安装的 rake 应用程序或引擎加载资产。因此,这需要删除/注释掉。
最后,别忘了Ctrl+F5 强制重新加载页面:)