Как бы вы упаковали файлы CSS / JS в Gem for Rails 3.1 без генераторов? - PullRequest
16 голосов
/ 17 июля 2011

Я хочу написать гем, который после объединения с Rails 3.1 Gemfile включает в себя несколько шаблонных файлов CSS и JS.

Я знаю о генераторах, но как я могу сделать это без них, чтобы эффекты камня можно было добавлять и удалять без чего-либо, кроме редактирования одной строки в Rails Gemfile?

В идеале, яХотелось бы, чтобы гем включал его CSS / JS по умолчанию при установке, а затем разрешил пользователю использовать генератор для генерации файлов CSS / JS, если он хочет внести какие-либо изменения.


Вот пример гемачто я скопировал из 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.

Ответы [ 4 ]

7 голосов
/ 17 июля 2012

Zurb предлагает отличную статью о том, как они упаковывают активы фонда в виде самоцвета:

"Yetify Your Rails: новый камень фонда и способ создания ваших собственных активов"

2 голосов
/ 18 июля 2011

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - Я еще не пробовал это. Вы можете использовать Asset Pipeline в Rails 3.1, чтобы сделать ресурсы в вашем геме доступными для клиентских приложений без использования генераторов.

Еще не нашли практического примера использования этого, но вот ссылка на ранние документы

http://edgeguides.rubyonrails.org/asset_pipeline.html http://edgeguides.rubyonrails.org/asset_pipeline.html#adding-assets-to-your-gems

1 голос
/ 13 января 2016

Для тех, кто ищет прямой ответ

Если у вас есть эти активы в вашем драгоценном камне:

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      
...