Padrino + sinatra-assetpack无法正常工作

时间:2012-04-13 12:26:47

标签: sinatra padrino sinatra-assetpack


我正在尝试将Padrino与Sinatra-Assetpack结合起来,但没有成功。

这是我的Gemfile:

source :rubygems

gem 'rake'
gem 'sinatra-flash', :require => 'sinatra/flash'

# Component requirements
gem 'haml'

# Assets requirements
gem 'sinatra-assetpack', :require => 'sinatra/assetpack'

# Test requirements

# Padrino Stable Gem
gem 'padrino', '0.10.6'

在我设置的app / app.rb文件中:

require 'sinatra/assetpack'

class Coffee < Padrino::Application
  register Padrino::Rendering
  register Padrino::Mailer
  register Padrino::Helpers

  register Sinatra::AssetPack

  assets {
    serve '/js',  from: '/app/assets/javascripts'
    serve '/css', from: '/app/assets/stylesheets'

    css :main, ['/css/main.css']
    js  :application, ['/js/application.js']
  }

  enable :sessions

end

我的javascript文件位于/ app / assets / javascripts和/ app / assets / stylesheets中的css文件中,但Padrino对/css/main.css和/js/application.js的响应为404

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:1)

无论如何,在我的应用程序中找出问题,但从app.rb代码的外观来看,它可能与你相同;

Assetpack提供您在serve电话中指定的目录中的文件,相对于您应用的根目录。在padrino中,应用程序根目录为yourapplication/app,因此,如果您告诉assetpack例如从/app/assets/stylesheets提供css,它实际上是在yourapplication/app/app/assets/stylesheets中查找文件。

问题的第二部分是在AssetPack文档中,它显示了代码

set :root, File.dirname(__FILE__)

register Sinatra::AssetPack行之前,我假设正确设置应用程序的根目录,以便AssetPack将查找根应用程序目录而不是app。但是,即使我修改了对set的调用以从app.rb文件中获取一个目录(因为它位于Padrino的app目录中),它似乎没有任何影响在AssetPack上。

简而言之,将“serve”调用中的from:路径修改为相对于您的app目录应解决问题。在你的情况下,他们应该是:

serve '/js',  from: '/assets/javascripts'
serve '/css', from: '/assets/stylesheets'