Sinatra资产管道 - 无法使用链接到预编译的css

时间:2014-11-26 15:10:21

标签: css ruby sass sinatra asset-pipeline

此处引用https://github.com/kalasjocke/sinatra-asset-pipeline/issues/42

嗨,

我无法在生产中使用它,而它在开发中可以正常工作

当我在生产中部署时,它会进行预编译,但不会加载CSS。 JS加载好,但没有CSS。 因此我有一个带有一些JS的html页面,但没有图像,没有CSS。

这是我的资产组织方式:

capture d ecran 2014-11-26 a 15 12 42

在本地开发环境中,资产预编译为public / assets /(rake assets:precompilecapture d ecran 2014-11-26 a 15 15 59

在Prod env中,capistrano任务以这种方式配置:

  after 'deploy:finishing', :finalize_update do
    on roles(:web), in: :sequence do
      execute(:chmod, '-R g+w', release_path) if fetch(:group_writable, true)

      within release_path do
        execute :rake, "assets:precompile RACK_ENV=production"
        execute :rake, "assets:clean RACK_ENV=production"
      end
    end
  end

Sinatra app(比方说myapp.rb)

# encoding: utf-8
require 'sinatra'
require 'haml'
require 'sass'
require 'compass'
require 'bootstrap-sass'
require 'sinatra/asset_pipeline'

Bundler.require

class MyApp < Sinatra::Base
  set :assets_prefix, %w(assets vendor/assets)
  set :assets_precompile, %w(app.js app.css *.png *.jpg *.svg *.eot *.ttf *.woff)
  register Sinatra::AssetPipeline

  ...

app.css

*= require application

application.scss

@import "bootstrap/variables";
@import "bootstrap/mixins";
...
...
@import "layout";

布局:

%link{ href: '/assets/application.css', rel: 'stylesheet' }

...

%script{ src:'//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'}
%script{ src: '//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js' }
%script{ src: '/assets/app.js' }

Rake文件:

require 'sinatra/asset_pipeline/task'
require './lib/myapp'
Sinatra::AssetPipeline::Task.define! Novagile

我错过了一些简单而明显的东西,还是一个恶意的配置技巧? :&#39;(

2 个答案:

答案 0 :(得分:0)

很难说究竟出了什么问题。肯定会错过您的布局或视图的来源。 请查看working example。我只能猜测,你必须自己处理环境(productiondevelopment)。我上面的例子中有view helper,您可能会感兴趣。

答案 1 :(得分:0)

好的,我不确定这个诀窍是什么:

我从Gemfile中删除了gem 'sass' from(罗盘仍在那里)

我使用的是sprockets助手,而不是ActionView::Helpers(如stylesheet_link_tag或stylesheet_tag)

我在指南针(生成的精灵)和链轮(在之前或之后重命名文件)方面遇到了一个小问题,但现在每个人都可以正常工作......

指南针使用generated_images_dir指南针配置选项解决,其中包含放置生成的精灵的目录值。