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, а файлы css в /app/assets/stylesheets, но Падрино отвечает 404 как для /css/main.css, так и для /js/application.js

Любые идеи?

Спасибо


person user1192084    schedule 13.04.2012    source источник
comment
Это очень странно... Я начал баунти в 50 баллов за этот вопрос, и он так и не был назначен создателем вопроса, но я не получил обратно 50 баллов... что с этим делать?   -  person Bill Dami    schedule 08.05.2012


Ответы (1)


Во всяком случае, разобрался с проблемой в моем приложении, но, судя по вашему коду app.rb, для вас, вероятно, то же самое;

Assetpack обслуживает файлы из каталогов, которые вы указываете в своих serve вызовах, относительно корня вашего приложения. В padrino корнем приложения является yourapplication/app, поэтому, если вы скажете, например, в assetspack обслуживать css из /app/assets/stylesheets, он действительно ищет файлы в yourapplication/app/app/assets/stylesheets.

Вторая часть проблемы заключалась в том, что в документах AssetPack он показывает код

set :root, File.dirname(__FILE__)

перед строкой register Sinatra::AssetPack, которая, как я полагаю, правильно устанавливает корневой каталог приложения, так что AssetPack будет искать в корневом каталоге приложения вместо app. Однако, даже если бы я изменил этот вызов на set, чтобы перейти на один каталог вверх из файла app.rb (поскольку он находится в каталоге app в Padrino), похоже, это не оказало никакого влияния на AssetPack.

Короче говоря, изменение from: путей в вызовах `serve', чтобы они относились к каталогу вашего приложения, должно решить проблему. В вашем случае они должны быть:

serve '/js',  from: '/assets/javascripts'
serve '/css', from: '/assets/stylesheets'
person Bill Dami    schedule 23.04.2012