使用rackup时未找到Sinatra静态资产
我有一个简单的Sinatra应用程序,使用模块化样式进行配置。 当我按照自述文件中的建议使用rackup -p 4567
启动应用程序时,不会提供公用文件夹中的静态资源。 但是当我使用shotgun ./config.ru -p 4567
开始它时,它们就会被送达。 为什么会这样? 这可能发生在生产中吗?
这是我的代码:
# config.ru require 'rubygems' require 'bundler' require 'sinatra' require 'jammit' Bundler.require Jammit.package! require File.expand_path('./stick.rb') run Stick
这是应用程序ruby文件
require 'sinatra/base' class Stick < Sinatra::Base get '/' do haml :index end end
看起来这个有两个很好的答案(现有的都不适合我)。
首先,在config.ru文件中,您可以包含以下内容:
# Replace the directory names to taste use Rack::Static, :urls => ['/stylesheets', '/javascripts'], :root => 'public'
或者,如果您通过rackup运行应用程序,则默认情况下:static
选项设置为false
。 您可以通过以下咒语解决此问题:
class MyApp < Sinatra::Base set :static, true # ... end
我有同样的问题,我这样解决了。 我在config.ru中添加了这一行。
map "/public" do run Rack::Directory.new("./public") end
我在我的视图中使用静态文件
%link{:type => 'text/css', :rel => 'stylesheet', :href => '/public/css/reset.css'} %link{:type => 'text/css', :rel => 'stylesheet', :href => '/public/css/text.css'} %link{:type => 'text/css', :rel => 'stylesheet', :href => '/public/css/960.css'} %link{:type => 'text/css', :rel => 'stylesheet', :href => '/public/css/app.css'}
不是积极的,但你可能需要set :root, Stick.root
?
(基于如何将模块化Sinatra应用程序部署到Heroku? )
为了让我能够通过config.ru启动新的Sinatra应用程序,我必须做其他答案中建议的两件事:
class MyApp < Sinatra::Base set :static, true set :root, File.dirname(__FILE__) end
首先在sinatra项目中创建一个名为“public”的文件夹,然后添加几个文件夹
- 样式表
- JavaScript的
- 图片
将CSS,JS和/或JPG,PNG(图像)添加到每个文件夹
最后,@ sirfilip说下面的行添加到config.ru文件
map "/public" do run Rack::Directory.new("./public") end
如果是通用的Sinatra(没有框架默认)
意见/ layout.erb
... <%= yield %> ...
意见/ index.erb
所有图片,样式表和javascripts都可用于Sinatra应用程序中注册的任何URL,问题解决了!