我们一直在尝试制作一个将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/