On 12 June 2017 at 03:36, Sam Ruby <[email protected]> wrote:
> On Sun, Jun 11, 2017 at 7:16 PM, sebb <[email protected]> wrote:
>> On 11 June 2017 at 00:14, Sam Ruby <[email protected]> wrote:
>>> On Sat, Jun 10, 2017 at 6:39 PM, sebb <[email protected]> wrote:
>>>> On 10 June 2017 at 23:20, Sam Ruby <[email protected]> wrote:
>>>>> On Sat, Jun 10, 2017 at 6:15 PM, sebb <[email protected]> wrote:
>>>>>> On 10 June 2017 at 17:22, Sam Ruby <[email protected]> wrote:
>>>>>>> On Sat, Jun 10, 2017 at 12:05 PM, sebb <[email protected]> wrote:
>>>>>>>> On 10 June 2017 at 16:58, Sam Ruby <[email protected]> wrote:
>>>>>>>>> On Sat, Jun 10, 2017 at 11:48 AM, sebb <[email protected]> wrote:
>>>>>>>>>> On 10 June 2017 at 15:57, Sam Ruby <[email protected]> wrote:
>>>>>>>>>>> On Sat, Jun 10, 2017 at 10:27 AM, sebb <[email protected]> wrote:
>
> [snip]
>
>>>>
>>>> I don't know where to start with ExecJS.
>>>
>>> Neither do I.
>>>
>>>> But it ought to be possible to use window.onerror or similar in the
>>>> generated code to catch/display the error to the user.
>>>
>>> There is no window object on the server.
>>>
>>>> Or wrap the generated JS in try/catch.
>>>
>>> And do what?
>>
>> Display err.stack
>>
>> for example:
>>
>> try {
>> ...
>> } catch(err) {
>> alert(err.stack);
>> console.log(err.stack);
>> etc.
>> }
>>
>> However I've no idea how to add that to the generated code.
>>
>> It might be worth seeing what the following gives:
>>
>> rescue ExecJS::ProgramError => e
>> Wunderbar.error e.inspect
>>
>> It may be that the error object has more info embedded.
>
> With no window object on the server, there is no window.alert. There
> is no console object on the server either. Lets try this the other
> way. I've included a sample program below with no dependencies other
> than execjs:
>
> require 'execjs'
>
> source = %{
> function test () {
> try {
> var x = null;
> x.y();
> } catch(err) {
> alert(err.stack);
> console.log(err.stack);
> }
> }
> }
>
> context = ExecJS.compile(source);
> context.call("test()");
Running that with ruby fails with the error:
test ((execjs):7:7): ReferenceError: alert is not defined (ExecJS::ProgramError)
However the generated app.js file contains code of the form:
.catch(function(error) {
alert(errror);
jQuery("#confirm").modal("hide");
self.setState({disabled: false})
which *does* use alert.
Though why it uses errror instead of error is unclear.
I don't know how the alert gets added to the generated js, but if that
could be updated to change the alert and/or wrap the code in a
try/catch block it might solve the issue.
==
As to improving the server code reporting, it looks as though it may
be sufficient to add
Wunderbar.error e.backtrace
after
https://github.com/rubys/wunderbar/blob/master/lib/wunderbar/react.rb#L133
> - Sam Ruby