Any progress on this issue? how to solve this on 3rd party libs, it is very
annoying...
On Wednesday, September 19, 2012 1:13:53 PM UTC-5, eugene miretsky wrote:
>
> Hi,
>
> So what are people doing now to solve it?
> I just had to rewrite all my 3rd party css files to replace the relative
> image path with <%= asset_path 'image_name' %>. Just wondering if anybody
> else came up with something better.
>
>
>
> On Tuesday, May 8, 2012 1:42:00 PM UTC-4, Brian Morearty wrote:
>>
>> I've had this problem with the asset pipeline as well, even though I
>> don't use submodules. I agree with Rodrigo that a solution is needed, but I
>> have not yet figured out what the best solution is--that's why I haven't
>> yet tried to contribute a solution myself.
>>
>> To recap, the problem occurs when integrating third party client-side
>> assets that include CSS which has relative paths to images or fonts. A
>> couple of real examples:
>>
>> // Chosen:
>> background: *url('chosen-sprite.png')* right top no-repeat;
>>
>> // Font-Awesome-More:
>> @font-face {
>> font-family: 'FontAwesome';
>> * src: url('../font/fontawesome-webfont.eot');*
>> }
>>
>>
>> The relative paths work fine in development mode but fail in production
>> when the CSS asset is packaged into application.css, which is at a
>> different directory level than the images and fonts. The ".." case is
>> especially tricky to work around.
>>
>> If it helps, I think this is a decent set of requirements for any
>> solution we come up with:
>>
>> - *Vendor's JS and CSS can be packaged in the minified JS and CSS
>> files* for the app, as described in the Rails Guide to the Asset
>> Pipeline, even if the CSS has relative path references to other assets.
>> - *Each JS library is in a directory named after it.* Personally,
>> this only matters to me when a JS library has multiple files (e.g., JS,
>> CSS, and images). For single-file libraries I don't mind having them sit
>> together in a single directory.
>> - *Let app developers keep each JS library's original directory
>> structure* when copying it into an app. In other words, something
>> like vendor/chosen, not vendor/javascripts/chosen.js +
>> vendor/stylesheets/chosen.css. Why? So later on, when you download a
>> newer
>> version, you don't have to go finding where you moved all the files.
>> - *Don't require the use of a gem just to use a JavaScript library.* Why?
>> Because not all JavaScript libraries have corresponding gems and even
>> when
>> there is one I have low confidence that it will be kept up-to-date. The
>> library and the gem are often written by different people. It's darn
>> likely
>> that the gem maintainer will not bother updating the gem in a timely
>> manner
>> every time the JS library gets an update.
>> - *Don't require app developers to modify the asset references in the
>> JavaScript library or its CSS.* That becomes a maintenance headache.
>> E.g., I don't want to replace background-image: url(bkgnd.png) with
>> background-image: url(<%= asset_path(bkgnd.png) %>) throughout the
>> CSS files in someone else's library.
>> - *Keep it simple*. :-) In other words, there might be an easy
>> solution that does not require parsing and rewriting CSS, and would work
>> even in JavaScript libraries that dynamically update CSS background paths.
>>
>> Thanks.
>>
>> Brian
>>
>>
>> On Monday, May 7, 2012 7:57:46 AM UTC-7, Rodrigo Rosenfeld Rosas wrote:
>>>
>>> As far as I understand this won't work for files I don't own, like
>>> linked files from external resources in submodule directories.
>>>
>>> I don't like the idea of copying the files from external projects and
>>> rewriting them.
>>>
>>> Cheers,
>>> Rodrigo.
>>>
>>> Em 07-05-2012 11:54, Rafael Mendonça França escreveu:
>>>
>>> Yes, it should and it does. Please take a look at the Assets pipeline
>>> guide[1].
>>>
>>>
>>> [1]
>>> http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets
>>> --
>>> *Rafael Mendonça França*
>>>
>>> On Monday, 7 May, 2012 at 11:49, Rodrigo Rosenfeld Rosas wrote:
>>>
>>> There are some times where I add some JavaScript libraries as
>>> submodules to my project:
>>>
>>> git submodule add git://... resources/project_name
>>> cd assets/stylesheets/my_controller
>>> ln -s ../../../resources/project_name/css/project_name.css
>>> cd -
>>> cd assets/images/my_controller
>>> ln -s ../../../resources/project_name/img/sprite.png
>>>
>>> While this works great in development mode, I have to create more
>>> symbolic links to make it work under production as well.
>>>
>>> Here is why. Under development mode the css is written like this:
>>>
>>> .some-class { background: url(sprite.png) } /* relative URL */
>>>
>>> Under development this file path is
>>> "/assets/my_controller/project_name.css" while the image is located at
>>> "/assets/my_controller/sprite.png".
>>>
>>> When assets:precompile is run, project_name.css no longer exists and the
>>> rule is appended to application.css, but the relative URL is not rewritten
>>> to 'my_controller/sprite.png' or '/assets/my_controller/sprite.png'.
>>>
>>> The Grails Resources plugin supports URL rewriting for dealing with this
>>> kind of issue that happens when using an asset pipeline:
>>>
>>> http://grails.org/plugin/resources
>>> http://grails-plugins.github.com/grails-resources/ (sorry,
>>> documentation is not that good, but it works this way, I promiss)
>>>
>>> It is not a good experience to have your application working under
>>> development and stopping working under production due to things like this.
>>>
>>> Also, I like the idea of grouping my assets in sub-directories.
>>>
>>> Shouldn't the Rails assets generator support URL rewriting in CSS for
>>> supporting such an organized tree both in development and production
>>> environment out of the box?
>>>
>>> Am I missing something?
>>>
>>> Best,
>>> Rodrigo.
>>>
>>>
>>>
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Core" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-core/-/lAmu2pqS7ckJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en.