juliusFile in yesod 0.8 eating all memory

Hi all, I've just upgraded to Yesod 0.8. I've changed all my Strings into Texts, and all my Data.JSON.Types into Data.Aeson.Types. I use these JSON objects in julius templates, by adding the orphan instance: instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON (Removing that instance causes compilation error, and I had it when I was using json-types). addJulius works fine when it contains Javascript code. However on one page I use juliusFile to load an external template. This eats all my memory and never returns under Warp when I launch the compiled exe (I see "thread killed" messages in the console, though), and in GHCi crashes with "out of memory". The code hasn't changed and was working fine in yesod 0.7 before the upgrade. If I remove juliusFile the page displays instantly. Any idea? I'm a bit stumped. I suppose I'm going to remove each of my variables in the julius file to narrow it down, but if anybody has any insight... Thanks! -- JP Moresmau http://jpmoresmau.blogspot.com/

Are you running juliusFile or juliusFileDebug? (The scaffolded site
uses the latter by default.)
Michael
On Fri, Apr 29, 2011 at 4:52 PM, JP Moresmau
Hi all,
I've just upgraded to Yesod 0.8. I've changed all my Strings into Texts, and all my Data.JSON.Types into Data.Aeson.Types. I use these JSON objects in julius templates, by adding the orphan instance: instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
(Removing that instance causes compilation error, and I had it when I was using json-types). addJulius works fine when it contains Javascript code. However on one page I use juliusFile to load an external template. This eats all my memory and never returns under Warp when I launch the compiled exe (I see "thread killed" messages in the console, though), and in GHCi crashes with "out of memory". The code hasn't changed and was working fine in yesod 0.7 before the upgrade. If I remove juliusFile the page displays instantly.
Any idea? I'm a bit stumped. I suppose I'm going to remove each of my variables in the julius file to narrow it down, but if anybody has any insight...
Thanks!
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel

juliusFile, I'm not running any scaffolded site, I've built everything
with 1s and 0s. (-:
Changing to juliusFileDebug results in the same behavior.
JP
On Fri, Apr 29, 2011 at 3:56 PM, Michael Snoyman
Are you running juliusFile or juliusFileDebug? (The scaffolded site uses the latter by default.)
Michael
On Fri, Apr 29, 2011 at 4:52 PM, JP Moresmau
wrote: Hi all,
I've just upgraded to Yesod 0.8. I've changed all my Strings into Texts, and all my Data.JSON.Types into Data.Aeson.Types. I use these JSON objects in julius templates, by adding the orphan instance: instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
(Removing that instance causes compilation error, and I had it when I was using json-types). addJulius works fine when it contains Javascript code. However on one page I use juliusFile to load an external template. This eats all my memory and never returns under Warp when I launch the compiled exe (I see "thread killed" messages in the console, though), and in GHCi crashes with "out of memory". The code hasn't changed and was working fine in yesod 0.7 before the upgrade. If I remove juliusFile the page displays instantly.
Any idea? I'm a bit stumped. I suppose I'm going to remove each of my variables in the julius file to narrow it down, but if anybody has any insight...
Thanks!
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
-- JP Moresmau http://jpmoresmau.blogspot.com/

Right, found it.
instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
That used to work but now seems to go into an infinite loop. I've
replaced it by:
instance (ToJSON a)=> ToJavascript a where
toJavascript =fromLazyText . decodeUtf8 . encode . toJSON
and everything works again. Not very elegant, have I missed something?
Shouldn't that instance be part of Yesod somewhere? I mean if we
standardize on Aeson, and we want variables in Javascript, it makes
sense to serialize ToJSON instances in a Julius template.
JP
On Fri, Apr 29, 2011 at 4:06 PM, JP Moresmau
juliusFile, I'm not running any scaffolded site, I've built everything with 1s and 0s. (-: Changing to juliusFileDebug results in the same behavior.
JP
On Fri, Apr 29, 2011 at 3:56 PM, Michael Snoyman
wrote: Are you running juliusFile or juliusFileDebug? (The scaffolded site uses the latter by default.)
Michael
On Fri, Apr 29, 2011 at 4:52 PM, JP Moresmau
wrote: Hi all,
I've just upgraded to Yesod 0.8. I've changed all my Strings into Texts, and all my Data.JSON.Types into Data.Aeson.Types. I use these JSON objects in julius templates, by adding the orphan instance: instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
(Removing that instance causes compilation error, and I had it when I was using json-types). addJulius works fine when it contains Javascript code. However on one page I use juliusFile to load an external template. This eats all my memory and never returns under Warp when I launch the compiled exe (I see "thread killed" messages in the console, though), and in GHCi crashes with "out of memory". The code hasn't changed and was working fine in yesod 0.7 before the upgrade. If I remove juliusFile the page displays instantly.
Any idea? I'm a bit stumped. I suppose I'm going to remove each of my variables in the julius file to narrow it down, but if anybody has any insight...
Thanks!
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
-- JP Moresmau http://jpmoresmau.blogspot.com/
-- JP Moresmau http://jpmoresmau.blogspot.com/

Nice work! In the switch to aeson, the old types were just removed from
Julius- we should add the aeson types back in now or otherwise make this
easier.
On Fri, Apr 29, 2011 at 7:32 AM, JP Moresmau
Right, found it.
instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
That used to work but now seems to go into an infinite loop. I've replaced it by:
instance (ToJSON a)=> ToJavascript a where toJavascript =fromLazyText . decodeUtf8 . encode . toJSON
and everything works again. Not very elegant, have I missed something? Shouldn't that instance be part of Yesod somewhere? I mean if we standardize on Aeson, and we want variables in Javascript, it makes sense to serialize ToJSON instances in a Julius template.
JP
On Fri, Apr 29, 2011 at 4:06 PM, JP Moresmau
wrote: juliusFile, I'm not running any scaffolded site, I've built everything with 1s and 0s. (-: Changing to juliusFileDebug results in the same behavior.
JP
On Fri, Apr 29, 2011 at 3:56 PM, Michael Snoyman
wrote: Are you running juliusFile or juliusFileDebug? (The scaffolded site uses the latter by default.)
Michael
On Fri, Apr 29, 2011 at 4:52 PM, JP Moresmau
wrote: Hi all,
I've just upgraded to Yesod 0.8. I've changed all my Strings into Texts, and all my Data.JSON.Types into Data.Aeson.Types. I use these JSON objects in julius templates, by adding the orphan instance: instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
(Removing that instance causes compilation error, and I had it when I was using json-types). addJulius works fine when it contains Javascript code. However on one page I use juliusFile to load an external template. This eats all my memory and never returns under Warp when I launch the compiled exe (I see "thread killed" messages in the console, though), and in GHCi crashes with "out of memory". The code hasn't changed and was working fine in yesod 0.7 before the upgrade. If I remove juliusFile the page displays instantly.
Any idea? I'm a bit stumped. I suppose I'm going to remove each of my variables in the julius file to narrow it down, but if anybody has any insight...
Thanks!
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
-- JP Moresmau http://jpmoresmau.blogspot.com/
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel

On Fri, Apr 29, 2011 at 5:32 PM, JP Moresmau
Right, found it.
instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
That used to work but now seems to go into an infinite loop. I've replaced it by:
instance (ToJSON a)=> ToJavascript a where toJavascript =fromLazyText . decodeUtf8 . encode . toJSON
Unfortunately, that's the best we can do here, since Javascript only works with Text, and aeson only works with ByteString.
and everything works again. Not very elegant, have I missed something? Shouldn't that instance be part of Yesod somewhere? I mean if we standardize on Aeson, and we want variables in Javascript, it makes sense to serialize ToJSON instances in a Julius template.
Good catch, it's supposed to be in yesod-json, but it's commented out right now. It was probably part of the changeover from json-types to aeson and got forgotten. I'm not a huge fan of the placement of this instance (it *is* an orphan), but the alternative is adding aeson as a dependency to hamlet. Michael
JP
On Fri, Apr 29, 2011 at 4:06 PM, JP Moresmau
wrote: juliusFile, I'm not running any scaffolded site, I've built everything with 1s and 0s. (-: Changing to juliusFileDebug results in the same behavior.
JP
On Fri, Apr 29, 2011 at 3:56 PM, Michael Snoyman
wrote: Are you running juliusFile or juliusFileDebug? (The scaffolded site uses the latter by default.)
Michael
On Fri, Apr 29, 2011 at 4:52 PM, JP Moresmau
wrote: Hi all,
I've just upgraded to Yesod 0.8. I've changed all my Strings into Texts, and all my Data.JSON.Types into Data.Aeson.Types. I use these JSON objects in julius templates, by adding the orphan instance: instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
(Removing that instance causes compilation error, and I had it when I was using json-types). addJulius works fine when it contains Javascript code. However on one page I use juliusFile to load an external template. This eats all my memory and never returns under Warp when I launch the compiled exe (I see "thread killed" messages in the console, though), and in GHCi crashes with "out of memory". The code hasn't changed and was working fine in yesod 0.7 before the upgrade. If I remove juliusFile the page displays instantly.
Any idea? I'm a bit stumped. I suppose I'm going to remove each of my variables in the julius file to narrow it down, but if anybody has any insight...
Thanks!
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
-- JP Moresmau http://jpmoresmau.blogspot.com/
-- JP Moresmau http://jpmoresmau.blogspot.com/

As an alternative to orphan instances, given the recent refactoring it
should be easy to now make Julius (and Coffee) a separate package (with the
aeson dependency).
On Fri, Apr 29, 2011 at 7:45 AM, Michael Snoyman
On Fri, Apr 29, 2011 at 5:32 PM, JP Moresmau
wrote: Right, found it.
instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
That used to work but now seems to go into an infinite loop. I've replaced it by:
instance (ToJSON a)=> ToJavascript a where toJavascript =fromLazyText . decodeUtf8 . encode . toJSON
Unfortunately, that's the best we can do here, since Javascript only works with Text, and aeson only works with ByteString.
and everything works again. Not very elegant, have I missed something? Shouldn't that instance be part of Yesod somewhere? I mean if we standardize on Aeson, and we want variables in Javascript, it makes sense to serialize ToJSON instances in a Julius template.
Good catch, it's supposed to be in yesod-json, but it's commented out right now. It was probably part of the changeover from json-types to aeson and got forgotten. I'm not a huge fan of the placement of this instance (it *is* an orphan), but the alternative is adding aeson as a dependency to hamlet.
Michael
JP
On Fri, Apr 29, 2011 at 4:06 PM, JP Moresmau
wrote: juliusFile, I'm not running any scaffolded site, I've built everything with 1s and 0s. (-: Changing to juliusFileDebug results in the same behavior.
JP
On Fri, Apr 29, 2011 at 3:56 PM, Michael Snoyman
wrote: Are you running juliusFile or juliusFileDebug? (The scaffolded site uses the latter by default.)
Michael
On Fri, Apr 29, 2011 at 4:52 PM, JP Moresmau
wrote: Hi all,
I've just upgraded to Yesod 0.8. I've changed all my Strings into Texts, and all my Data.JSON.Types into Data.Aeson.Types. I use these JSON objects in julius templates, by adding the orphan instance: instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
(Removing that instance causes compilation error, and I had it when I was using json-types). addJulius works fine when it contains Javascript code. However on one page I use juliusFile to load an external template. This eats all my memory and never returns under Warp when I launch the compiled exe (I see "thread killed" messages in the console, though), and in GHCi crashes with "out of memory". The code hasn't changed and was working fine in yesod 0.7 before the upgrade. If I remove juliusFile the page displays instantly.
Any idea? I'm a bit stumped. I suppose I'm going to remove each of my variables in the julius file to narrow it down, but if anybody has any insight...
Thanks!
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
-- JP Moresmau http://jpmoresmau.blogspot.com/
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel

What package do need to upgrade to get away this problem ?
Thanks.
2011/4/29 Greg Weber
As an alternative to orphan instances, given the recent refactoring it should be easy to now make Julius (and Coffee) a separate package (with the aeson dependency).
On Fri, Apr 29, 2011 at 7:45 AM, Michael Snoyman
wrote: On Fri, Apr 29, 2011 at 5:32 PM, JP Moresmau
wrote: Right, found it.
instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
That used to work but now seems to go into an infinite loop. I've replaced it by:
instance (ToJSON a)=> ToJavascript a where toJavascript =fromLazyText . decodeUtf8 . encode . toJSON
Unfortunately, that's the best we can do here, since Javascript only works with Text, and aeson only works with ByteString.
and everything works again. Not very elegant, have I missed something? Shouldn't that instance be part of Yesod somewhere? I mean if we standardize on Aeson, and we want variables in Javascript, it makes sense to serialize ToJSON instances in a Julius template.
Good catch, it's supposed to be in yesod-json, but it's commented out right now. It was probably part of the changeover from json-types to aeson and got forgotten. I'm not a huge fan of the placement of this instance (it *is* an orphan), but the alternative is adding aeson as a dependency to hamlet.
Michael
JP
On Fri, Apr 29, 2011 at 4:06 PM, JP Moresmau
wrote: juliusFile, I'm not running any scaffolded site, I've built everything with 1s and 0s. (-: Changing to juliusFileDebug results in the same behavior.
JP
On Fri, Apr 29, 2011 at 3:56 PM, Michael Snoyman
wrote: Are you running juliusFile or juliusFileDebug? (The scaffolded site uses the latter by default.)
Michael
On Fri, Apr 29, 2011 at 4:52 PM, JP Moresmau
wrote: Hi all,
I've just upgraded to Yesod 0.8. I've changed all my Strings into Texts, and all my Data.JSON.Types into Data.Aeson.Types. I use these JSON objects in julius templates, by adding the orphan instance: instance (ToJSON a)=> ToJavascript a where toJavascript =toJavascript . toJSON
(Removing that instance causes compilation error, and I had it when I was using json-types). addJulius works fine when it contains Javascript code. However on one page I use juliusFile to load an external template. This eats all my memory and never returns under Warp when I launch the compiled exe (I see "thread killed" messages in the console, though), and in GHCi crashes with "out of memory". The code hasn't changed and was working fine in yesod 0.7 before the upgrade. If I remove juliusFile the page displays instantly.
Any idea? I'm a bit stumped. I suppose I'm going to remove each of my variables in the julius file to narrow it down, but if anybody has any insight...
Thanks!
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
-- JP Moresmau http://jpmoresmau.blogspot.com/
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
-- Best regards, Cheshkov Anton Phone: +7 909 005 18 82 Skype: cheshkov_anton

I just released yesod-json 0.1.1, which provides the instance described by JP.
Michael
On Fri, Apr 29, 2011 at 6:11 PM, Anton Cheshkov
What package do need to upgrade to get away this problem ? Thanks.
2011/4/29 Greg Weber
As an alternative to orphan instances, given the recent refactoring it should be easy to now make Julius (and Coffee) a separate package (with the aeson dependency). On Fri, Apr 29, 2011 at 7:45 AM, Michael Snoyman
wrote: On Fri, Apr 29, 2011 at 5:32 PM, JP Moresmau
wrote: Right, found it.
> instance (ToJSON a)=> ToJavascript a where > toJavascript =toJavascript . toJSON
That used to work but now seems to go into an infinite loop. I've replaced it by:
instance (ToJSON a)=> ToJavascript a where toJavascript =fromLazyText . decodeUtf8 . encode . toJSON
Unfortunately, that's the best we can do here, since Javascript only works with Text, and aeson only works with ByteString.
and everything works again. Not very elegant, have I missed something? Shouldn't that instance be part of Yesod somewhere? I mean if we standardize on Aeson, and we want variables in Javascript, it makes sense to serialize ToJSON instances in a Julius template.
Good catch, it's supposed to be in yesod-json, but it's commented out right now. It was probably part of the changeover from json-types to aeson and got forgotten. I'm not a huge fan of the placement of this instance (it *is* an orphan), but the alternative is adding aeson as a dependency to hamlet.
Michael
JP
On Fri, Apr 29, 2011 at 4:06 PM, JP Moresmau
wrote: juliusFile, I'm not running any scaffolded site, I've built everything with 1s and 0s. (-: Changing to juliusFileDebug results in the same behavior.
JP
On Fri, Apr 29, 2011 at 3:56 PM, Michael Snoyman
wrote: Are you running juliusFile or juliusFileDebug? (The scaffolded site uses the latter by default.)
Michael
On Fri, Apr 29, 2011 at 4:52 PM, JP Moresmau
wrote: > Hi all, > > I've just upgraded to Yesod 0.8. I've changed all my Strings into > Texts, and all my Data.JSON.Types into Data.Aeson.Types. I use these > JSON objects in julius templates, by adding the orphan instance: > instance (ToJSON a)=> ToJavascript a where > toJavascript =toJavascript . toJSON > > (Removing that instance causes compilation error, and I had it when > I > was using json-types). > addJulius works fine when it contains Javascript code. However on > one > page I use juliusFile to load an external template. This eats all my > memory and never returns under Warp when I launch the compiled exe > (I > see "thread killed" messages in the console, though), and in GHCi > crashes with "out of memory". > The code hasn't changed and was working fine in yesod 0.7 before the > upgrade. If I remove juliusFile the page displays instantly. > > Any idea? I'm a bit stumped. I suppose I'm going to remove each of > my > variables in the julius file to narrow it down, but if anybody has > any > insight... > > Thanks! > > -- > JP Moresmau > http://jpmoresmau.blogspot.com/ > > _______________________________________________ > web-devel mailing list > web-devel@haskell.org > http://www.haskell.org/mailman/listinfo/web-devel > -- JP Moresmau http://jpmoresmau.blogspot.com/
-- JP Moresmau http://jpmoresmau.blogspot.com/
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
-- Best regards, Cheshkov Anton Phone: +7 909 005 18 82 Skype: cheshkov_anton
participants (4)
-
Anton Cheshkov
-
Greg Weber
-
JP Moresmau
-
Michael Snoyman