Как бы вы упаковывали файлы CSS/JS в Gem for Rails 3.1 без генераторов?
Я хочу написать драгоценный камень, который, будучи связанным с Rails 3.1 Gemfile, включает некоторые шаблонные CSS и JS файлы.
Я знаю о генераторах, но как я могу сделать это без них, чтобы эффекты gem могли быть добавлены и удалены без каких-либо изменений, кроме редактирования одной строки в Rails Gemfile?
В идеале, я хотел бы, чтобы gem включил свой CSS/JS по умолчанию при установке, а затем позвольте пользователю использовать генератор для генерации файлов CSS/JS, если они хотят внести какие-либо изменения.
Здесь образец gem, который я скопировал из jquery-rails, который включает файлы javascript без генераторов.
css_gem/
lib/
css_gem.rb {1}
css_gem/
engine.rb {2}
app/
assets/
stylesheets/
css_gem/
index.css {3}
base.css {4}
{1} lib/css_gem.rb
module CssGem
require "css_gem/engine"
end
{2} lib/css_gem/engine.rb
module CSSGem
class Engine < Rails::Engine
end
end
{3} app/assets/stylesheets/css_gem/index.css
/*
*= require base
*/
{4} app/assets/stylesheets/css_gem/base.css
.custom { color: red; }
Rails Gemfile
gem 'css_gem', :path => 'path_to_my_local_gem'
Это не работает для меня, а Rails не видит файл CSS. Что я делаю неправильно?
Решение: К счастью, я нашел видео, чтобы держать меня за руку: http://house9.blogspot.com/2011/06/rails-31-asset-gem.html
Мне пришлось вручную добавить *= require css_gem
в мой манифест стилей Rails (app/assets/stylesheets/application.css). Duh.
Ответы
Ответ 1
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - Я еще не пробовал. Вы можете использовать Asset Pipeline в Rails 3.1, чтобы сделать активы в вашем драгоценном камне доступными для клиентских приложений без использования генераторов.
Не нашел практического примера этого в использовании, но вот ссылка на ранние документы
http://edgeguides.rubyonrails.org/asset_pipeline.html
http://edgeguides.rubyonrails.org/asset_pipeline.html#adding-assets-to-your-gems
Ответ 2
Существует замечательная статья Zurb о том, как они упаковывали основные активы в качестве драгоценных камней:
"Ярость ваших рельсов: новый фонд драгоценных камней и способы обеспечения собственных активов"
Ответ 3
Я собираю несколько статей о том, как окупить ваши активы:
Ответ 4
Для тех, кто ищет прямой ответ
Если у вас есть эти активы в вашем драгоценном камне:
app
|__ assets
|__ javascripts
| |__ foo
| |__ foo.js
|
|__ stylesheets
|__ foo
|__ foo.css
Активы будут включены автоматически, если вы создадите генератор (в своем драгоценном камне) следующим образом:
# lib/generators/foo/install/install_generator.rb
module Foo
module Generators
class InstallGenerator < Rails::Generators::Base
def add_javascripts
append_file 'app/assets/javascripts/application.js', "//= require foo/foo\n"
end
def add_stylesheets
inject_into_file 'app/assets/stylesheets/application.css', " *= require foo/foo\n", :before => /\*\//, :verbose => true
end
end
end
end