Syed
Syed

Reputation: 16513

Manage Plugin's Asset in Rails

I am just trying to figure out what's the best way to manage Plugin's Asset in Rails. For Eg. Let's consider Bootstrap.

I understand there is "vendor" directory for that but even there

I like to keep below directory structure:

App
|-- assets
|   |-- plugins
|   |   |-- bootstrap
|   |   |   |-- fonts
|   |   |   |-- css
|   |   |   |   |-- bootstrap.css
|   |   |   |   |-- bootstrap.min.css
|   |   |   |-- js
|   |   |   |   |-- bootstrap.js
|   |   |   |   |-- bootstrap.min.js

I DON'T LIE to follow below directory structure:

App
|-- assets
|   |-- fonts
|   |-- css
|   |   |-- application.css
|   |   |-- bootstrap.css
|   |   |-- bootstrap.min.css
|   |   |-- common-style.css
|   |-- js
|   |   |-- application.js
|   |   |-- bootstrap.js
|   |   |-- bootstrap.min.js
|   |   |-- common-script.css

As you can notice above, now if you start adding plugins, files goes into general folders rather grouping all assets with respect to a plugin stay together. If not grouped it will look messy, isn't it?

I understand there is "vendor" directory even there I LIKE to keep below directory structure:

|-- App
|-- vendor
|   |-- assets
|   |   |-- javascripts
|   |   |-- stylesheets
|   |-- bootstrap
|   |   |-- fonts
|   |   |-- css
|   |   |   |-- bootstrap.css
|   |   |   |-- bootstrap.min.css
|   |   |-- js
|   |   |   |-- bootstrap.js
|   |   |   |-- bootstrap.min.js

I DON'T LIKE to follow below directory structure:

|-- App
|-- vendor
|   |-- fonts
|   |-- assets
|   |-- stylesheets
|   |   |-- bootstrap.css
|   |   |-- bootstrap.min.css
|   |   |-- iCheck.css
|   |-- javascripts
|   |   |-- bootstrap.js
|   |   |-- bootstrap.min.js
|   |   |-- iCheck.js

Upvotes: 0

Views: 79

Answers (1)

Mohamad
Mohamad

Reputation: 35349

Rails has a special directory for adding third party assets. It's called vendor. Underneath it you will find vendor/assets, which contains javascripts and stylesheets subdirectories. So use that instead of app/assets. The latter is where you are supposed to save your own files.

If you are using something like Bootstrap, and this stands true for most plugins, well, it's even easier. Most frameworks are packaged into gems. This means you don't have to worry about manually adding the asset files as the Asset Pipeline handles all of that for you. At most you just have to include the files in your manifest.

A JavaScript file in application.js, for example:

//= require jquery

If you want to go a step further and enforce your own directory structure, you will have to change Rails' config:

config.assets.precompile += %w(vendor/custom_dir/*.jpg)
config.assets.precompile += %w(vendor/custom_dir/*.js)

You can read more about this on Rails guides

You might also find this issue helpful.

Upvotes: 1

Related Questions