我可以从宝石内部提供资产吗?

时间:2012-01-22 00:08:36

标签: ruby-on-rails ruby-on-rails-3 asset-pipeline

我想将一些常见资产(如css,js和icon图像)打包成一个宝石供我个人使用。

我可以直接使用gem内部的资源,还是必须让生成器将它们移动到主应用程序中?

2 个答案:

答案 0 :(得分:3)

您需要做的是:

  • 制作铁路:

    module MyGemName
      module Rails
        class Engine < ::Rails::Engine
        end
      end
    end
    
  • 将它们放在一个原本属于正确资产路径的目录中,例如lib/assets/stylesheets

  • 使用sprockets包含javascripts:

    //= require "foobar"
    
  • 使用sass包含样式表:

    @import "foobar";
    
  • 如果您参考样式表中的图片,请使用sass函数image-url

    .widget {
      background-image: image-url("widget-icon.png");
    }
    

assets目录的行为与在您自己的应用程序中的行为完全相同。

您可以在formalize-rails中找到一个示例,其中包含样式表,javascripts和图像。

答案 1 :(得分:0)

使用Rails 3.2,您可以创建引擎并将资产放在资产目录中,以便自动获取它们。但要注意,如果使用生成器创建可安装引擎,它将在javascripts,images和stylesheets下创建命名空间目录。不要将您的东西放在这些子目录中,否则父应用程序将找不到它们。只需将它们直接放在javascripts,图像或样式表中即可。