【问题标题】:How would you package CSS/JS files in a Gem for Rails 3.1 without generators?在没有生成器的情况下,如何将 CSS/JS 文件打包到 Gem for Rails 3.1?
【发布时间】:2011-07-17 19:34:14
【问题描述】:

我想编写一个 gem,一旦捆绑到 Rails 3.1 Gemfile 中,就会包含一些样板 CSS 和 JS 文件。

我知道生成器,但是没有它们我怎么能做到这一点,以便可以添加和删除 gem 的效果,而无需在 Rails Gemfile 中编辑一行之外的任何东西?

理想情况下,我希望 gem 在安装时包含其默认的 CSS/JS,然后让用户使用生成器生成 CSS/JS 文件,如果他们想进行任何修改。


这是我从 jquery-rails 复制的示例 gem,其中包括没有生成器的 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 宝石文件

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)。呵呵。

【问题讨论】:

    标签: ruby-on-rails gem ruby-on-rails-3.1


    【解决方案1】:

    Zurb 有一篇很棒的文章,介绍了他们如何将基础资产打包为 gem:

    "Yetify Your Rails: New Foundation Gem and How To Gemify Your Own Assets"

    【讨论】:

      【解决方案2】:
      【解决方案3】:

      免责声明 - 我还没有尝试过。您可以利用 Rails 3.1 中的资产管道使 gem 中的资产可供客户端应用程序使用,而无需使用生成器。

      尚未找到实际使用的示例,但这里是早期文档的链接

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

      【讨论】:

      • 谢谢。 This version 提到 jquery-rails gem 作为如何做到这一点的演示,所以我编辑了我的问题以显示我复制它失败的尝试。
      • 我接受了您的回答,因为它使我走上了正确的道路,并帮助我缩小了 Google 的用途。
      • 很高兴能够提供帮助。
      【解决方案4】:

      对于那些寻求直接答案的人

      如果您的 gem 中有这些资产:

      app  
      |__ assets  
         |__ javascripts
         |  |__ foo
         |     |__ foo.js
         |
         |__ stylesheets
            |__ foo
               |__ foo.css
      

      如果您像这样创建生成器(在您的 gem 中),资产将自动包含在内:

      # 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      
      

      【讨论】:

        猜你喜欢
        • 2016-04-20
        • 2015-01-04
        • 2020-01-10
        • 1970-01-01
        • 1970-01-01
        • 2015-11-12
        • 2015-11-30
        • 2021-11-25
        • 1970-01-01
        相关资源
        最近更新 更多