我们一直在尝试制作一个将CSS文件存储到Rails 3和Rails 4项目的gem。使用宝石,我们应该只能在一个地方(宝石)进行更改,以便对我们所有项目进行视觉更改。

除此以外,我们发现的所有教程都不再是最新的,或者不再起作用。使用Rake Routes中的教程,我们得出以下情况来创建一个最小的gem,该gem将CSS文件添加到Rails 3和Rails 4项目中

宝石规格

$:.push File.expand_path("../lib", __FILE__)
require "static_assets/version"

Gem::Specification.new do |s|
  s.name        = "static_assets"
  s.version     = StaticAssets::VERSION
  s.authors     = ["Etienne van Delden"]
  s.email       = ["evdelden@i-level.nl"]
  s.homepage    = "http://www.i-level.nl"
  s.summary     = "Summary of StaticAssets."
  s.description = "Description of StaticAssets."

  s.files       = `git ls-files`.split("\n")
  s.test_files  = `git ls-files -- {test,spec,features}/*`.split("\n")

  s.add_dependency "rails", ">= 3.1"
  s.require_paths = ["lib"]

  s.add_development_dependency "sqlite3"
end


lib / static_assets.rb

require "static_assets/engine"

module StaticAssets
end


lib / static_assets / engine.rb

module StaticAssets
  class Engine < ::Rails::Engine
    initializer 'static_assets.load_static_assets' do |app|
      app.middleware.use ::ActionDispatch::Static, "#{root}/vendor"
    end
  end
end


供应商/资产/样式表/our_awesome_static_assets.css

body{
  background-color: red !important;
}


这似乎是创建gem的最少代码。 rake builds成功,rake release也成功

但是,当将gem添加到我们的Rails 3项目中时,它找不到CSS文件:

宝石文件

gem 'static_assets'


application.css

*= require static_assets


当启动项目并转到索引页面时,我们得到以下错误:

 Sprockets::FileNotFound in Sessions#new

Showing *snipped*/app/views/layouts/application.html.erb where line #14 raised:

couldn't find file 'static_assets'
  (in *snipped*/app/assets/stylesheets/application.css:4)


我们需要做些什么更改才能获得一个最小的代码示例,以向支持Rails 3 AND Rails 4的Rails项目中添加样式表?

可以在Github上找到代码

最佳答案

我几个月前写了一个宝石-exception_handler

Our gem uses custom assets(不是CSS,仅是图像),我将在这里详细介绍:

-

发动机

当您为Rails编写gem时,you're really writing an engine可以包含在Rails应用程序中。

最基本的解释是,当您加载gem时,它实际上会将“隐藏的”文件和功能附加到您的应用中。不是魔术或巫术-实际上只是将新文件添加到应用程序的运行时环境中,使您可以像亲自编写文件一样调用该功能。

当我了解这一点时,宝石的创建过程变得更加简单了。

-

资产

我认为您最好将资产放入以下文件结构中:

app
|-- assets
|    |-- stylesheets
|    |   |-- static_assets
|    |   |   |-- static_assets.css


这将使您的引擎能够使用/创建所需的文件,从而使它们能够代表您工作。与许多其他基于Rails的gem一样,Rails环境将根据可用的文件来加载资产管道。

正如我提到的那样,确实有一个引擎可以在运行时将文件“注入”到您的应用程序中。这意味着,与其他宝石(例如twitter-bootstrap-rails宝石)一样,您必须按以下方式调用这些注入的文件:

#app/assets/stylesheets/application.css
/*
  *= require static_assets/static_assets
*/


这应该为您工作-否则,我们将在评论中进行调查!

关于css - 如何创建一个为Rails 3和Rails 4元素提供静态 Assets 的gem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25324312/

10-12 12:31
查看更多