1


我正在尝试将 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 以 404 响应 /css/main.css 和 /js/application.js

有任何想法吗?

谢谢

4

1 回答 1

1

无论如何,在我的应用程序中解决了这个问题,但从你的 app.rb 代码的外观来看,它可能对你来说是一样的;

Assetpack 从您在serve调用中指定的目录中提供文件,相对于您的应用程序的 root。在 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 文件上移一个目录(因为它位于appPadrino 的目录中),它似乎对 AssetPack 没有任何影响。

简而言之,from:将 `serve' 调用中的路径修改为相对于您的应用程序目录应该可以解决问题。在您的情况下,它们应该是:

serve '/js',  from: '/assets/javascripts'
serve '/css', from: '/assets/stylesheets'
于 2012-04-23T19:26:56.483 回答