Closed itsadok closed 13 years ago
Converting relative url to absolute url is the designed feature. The reason is when css files get merged/compressed, they will be accessed from a different url path, most commonly from /public/stylesheet/xx.css to /public/gs/compressed.css. therefore the relative url pointing to the image will no longer be accessible.
When you say " which does not sound like the right way to go about it at all ", can you be more clear about what problem you've encountered, and what should be the right way to you.
On Tue, Nov 15, 2011 at 12:43 AM, Israel Tsadok < reply@reply.github.com
wrote:
If I have a CSS rule like this:
background-image: url('bg.png')
it becomes:
background-image: url(/public/home/itsadok/code/project/test/public/stylesheets/bg.png')
From looking at the code, it seems that the problem is
processRelativeUrl_()
using the full path of the filename to convert the URLs from relative to absolute, which does not sound like the right way to go about it at all.This issue seems to match Issue #18 in the symptoms, though I couldn't figure out how 82a4684b9 fixed it. I tried running the jquery-ui project, and the issue seems to persist there. (I had to make some changes to make the sample run under v1.2.3).
Reply to this email directly or view it on GitHub: https://github.com/greenlaw110/greenscript/issues/24
I created a pull request that I hope would make things a little more clear. It's possible that I'm just missing something here, but right now I'm having problems with jquery-ui that I wasn't able to resolve without changing your code.
I understand the idea behind converting the relative URL to absolute ones, but the way this is done right now is by using the path of the physical file as it sits on the server.
If I'm understanding this correctly, I can have a rule in the routes file like this:
GET /virtual/ staticDir:physical
and then a request like GET /virtual/style.css
would retrieve a file from /physical/style.css
, though any relative URL in that file needs to be resolved to /virtual/resource.png
. Using the actual path in the filesystem would result in the relative URLs resolving to /physical/resource.png
, and would cause 404s.
Side note: this is all rather theoretical about the "best" way to handle this, but the reason I'm bothering you is because right now the conversion to absolute URLs doesn't work at all.
Like I said in my original comment, the full path in the filesystem gets added to any relative URL, which results in 404. There might be some kind of a difference between Windows and Linux that causes this problem. I'm not sure.
I did notice that you're checking if Fn starts with a slash, which would be true for Linux full paths, but false for Windows full paths.
Can you show me your route file?
On Tue, Nov 15, 2011 at 1:11 AM, Israel Tsadok < reply@reply.github.com
wrote:
I created a pull request that I hope would make things a little more clear. It's possible that I'm just missing something here, but right now I'm having problems with jquery-ui that I wasn't able to resolve without changing your code.
I understand the idea behind converting the relative URL to absolute ones, but the way this is done right now is by using the path of the physical file as it sits on the server.
If I'm understanding this correctly, I can have a rule in the routes file like this:
GET /virtual/ staticDir:physical
and then a request like
GET /virtual/style.css
would retrieve a file from/physical/style.css
, though any relative URL in that file needs to be resolved to/virtual/resource.png
. Using the actual path in the filesystem would result in the relative URLs resolving to/physical/resource.png
, and would cause 404s.
Reply to this email directly or view it on GitHub: https://github.com/greenlaw110/greenscript/issues/24#issuecomment-2730757
I could, but I don't think it would help.
I just reproduced this bug in a few simple steps:
(Using play 1.2.3)
play new greentest
- play -> greenscript 1.2.6k
body { background-image: url(test.png) }
play dependencies
play run
On my machine, the rendered page is:
body { background-image: url(/public/home/itsadok/code/greentest/public/stylesheets/test.png) }
If you'd like, I can upload the project to github.
thanks. I think there must be some configuration problems. Are you able to run the sample application named "jquery-ui" correctly ?
On Tue, Nov 15, 2011 at 1:56 AM, Israel Tsadok < reply@reply.github.com
wrote:
I could, but I don't think it would help.
I just reproduced this bug in a few simple steps:
(Using play 1.2.3)
- Create a new project by running
play new greentest
- Edit dependencies.yml and add the line
- play -> greenscript 1.2.6k
- Edit main.css and add the line
body { background-image: url(test.png) }
- Run
play dependencies
- Run
play run
- Go to http://localhost:9000/public/stylesheets/main.css
On my machine, the rendered page is:
body { background-image: url(/public/home/itsadok/code/greentest/public/stylesheets/test.png) }
If you'd like, I can upload the project to github.
Reply to this email directly or view it on GitHub: https://github.com/greenlaw110/greenscript/issues/24#issuecomment-2731286
I'm using Ubuntu 11.10, if that makes any difference.
Question: in GreenScriptPlugin.java, line 338, where you call min.processStatic(file.getRealFile())
, is the File object supposed to contain an absolute path, or a relative path? I'm trying to figure out what's going on there.
OK, after a little more debugging, I see that the difference between Linux in Windows in this case is in the line
int p = fn.lastIndexOf("/") + 1;
Under Windows, p
will always be 0, whereas under Linux it will contain the position of the CSS filename. This means that under Windows, the next line would always assign resourceUrlPath_
to fn
, and that becomes the prefix to the files.
Strange I didn't get the problem with my product server and testing server, both are ubuntu system. See the screen cap here: http://i44.tinypic.com/vrbtht.jpg
BTW, why did you say "jquery-ui" sample "weren't woking with 1.2.3"? I've just wget a 1.2.3 package, unzip it and install greenscript-1.2.6k and then go to the jquery-ui sample folder type "play run --%prod", back to my front-end browser, it run correctly.
What configuration changes did you made to jquery-ui to get it run in your env?
Sorry, I guess I was mistaken about the jquery-ui sample not working under 1.2.3. Just tried it now and it worked.
I also noticed that the URL paths looked good when I go to the sample home page. There is a link there to a CSS file under /public/gs/8beb6a4a-b305-4159-82ab-cce683b1dd02.css
, and and I look at it, all the URLs have been converted to absolute ones just fine.
However, if I go to [http://localhost:9000/public/jqueryui/css/dot-luv/jquery-ui-1.8.16.custom.css], then the relative URLs all look mangled.
So the workaround now seems obvious: replace this:
#{stylesheet src:'jquery-ui/ui-smoothness/jquery-ui-1.8.16.css' /}
with this:
#{greenscript.css '/public/stylesheets/jquery-ui/ui-smoothness/jquery-ui-1.8.16.custom.css', output: 'all'/}
Just tried it, and it solved my problem.
I would still suggest that this issue should be addressed
What is this tag: #{stylesheet /} ?
On Tue, Nov 15, 2011 at 7:12 PM, Israel Tsadok < reply@reply.github.com
wrote:
Sorry, I guess I was mistaken about the jquery-ui sample not working under 1.2.3. Just tried it now and it worked.
I also noticed that the URL paths looked good when I go to the sample home page. There is a link there to a CSS file under
/public/gs/8beb6a4a-b305-4159-82ab-cce683b1dd02.css
, and and I look at it, all the URLs have been converted to absolute ones just fine.However, if I go to [ http://localhost:9000/public/jqueryui/css/dot-luv/jquery-ui-1.8.16.custom.css], then the relative URLs all look mangled.
So the workaround now seems obvious: replace this:
{stylesheet src:'jquery-ui/ui-smoothness/jquery-ui-1.8.16.css' /}
with this:
{greenscript.css
'/public/stylesheets/jquery-ui/ui-smoothness/jquery-ui-1.8.16.custom.css', output: 'all'/}
Just tried it, and it solved my problem.
I would still suggest that this issue should be addressed
Reply to this email directly or view it on GitHub: https://github.com/greenlaw110/greenscript/issues/24#issuecomment-2742080
I got it. It's play's built-in tag. So you actually found a problem with GreenScript's static compressing serivce. thanks.
BTW, I suggest you read the GreenScript document and also thishttp://software-lgl.blogspot.com/2011/07/how-greenscript-is-used-incorrectly.htmlhttp://software-lgl.blogspot.com/2011/07/how-greenscript-is-used-incorrectly.htmlblog to help you get better understanding on how to use GreenScript
On Tue, Nov 15, 2011 at 7:46 PM, green greenlaw110@gmail.com wrote:
What is this tag: #{stylesheet /} ?
On Tue, Nov 15, 2011 at 7:12 PM, Israel Tsadok < reply@reply.github.com
wrote:
Sorry, I guess I was mistaken about the jquery-ui sample not working under 1.2.3. Just tried it now and it worked.
I also noticed that the URL paths looked good when I go to the sample home page. There is a link there to a CSS file under
/public/gs/8beb6a4a-b305-4159-82ab-cce683b1dd02.css
, and and I look at it, all the URLs have been converted to absolute ones just fine.However, if I go to [ http://localhost:9000/public/jqueryui/css/dot-luv/jquery-ui-1.8.16.custom.css], then the relative URLs all look mangled.
So the workaround now seems obvious: replace this:
{stylesheet src:'jquery-ui/ui-smoothness/jquery-ui-1.8.16.css' /}
with this:
{greenscript.css
'/public/stylesheets/jquery-ui/ui-smoothness/jquery-ui-1.8.16.custom.css', output: 'all'/}
Just tried it, and it solved my problem.
I would still suggest that this issue should be addressed
Reply to this email directly or view it on GitHub: https://github.com/greenlaw110/greenscript/issues/24#issuecomment-2742080
Thanks. I wanted to use the "Transparent Compression" feature as a starting point, and only tweak it later if I saw the need. I guess I'm better off using the recommended way.
Thanks for taking the time to understand my issue, and thanks for a great plugin!
Thank you for trying GreenScript and finding and tolerating the issue with it.
BTW, I found the above link to the blog is not correct, here is the right one: http://software-lgl.blogspot.com/2011/07/how-greenscript-is-used-incorrectly.html
On Tue, Nov 15, 2011 at 10:50 PM, Israel Tsadok < reply@reply.github.com
wrote:
Thanks. I wanted to use the "Transparent Compression" feature as a starting point, and only tweak it later if I saw the need. I guess I'm better off using the recommended way.
Thanks for taking the time to understand my issue, and thanks for a great plugin!
Reply to this email directly or view it on GitHub: https://github.com/greenlaw110/greenscript/issues/24#issuecomment-2743756
If I have a CSS rule like this:
it becomes:
From looking at the code, it seems that the problem is
processRelativeUrl_()
using the full path of the filename to convert the URLs from relative to absolute, which does not sound like the right way to go about it at all.This issue seems to match Issue #18 in the symptoms, though I couldn't figure out how 82a4684b9 fixed it. I tried running the jquery-ui project, and the issue seems to persist there. (I had to make some changes to make the sample run under v1.2.3).