On 12 June 2017 at 03:36, Sam Ruby <ru...@intertwingly.net> wrote:
> On Sun, Jun 11, 2017 at 7:16 PM, sebb <seb...@gmail.com> wrote:
>> On 11 June 2017 at 00:14, Sam Ruby <ru...@intertwingly.net> wrote:
>>> On Sat, Jun 10, 2017 at 6:39 PM, sebb <seb...@gmail.com> wrote:
>>>> On 10 June 2017 at 23:20, Sam Ruby <ru...@intertwingly.net> wrote:
>>>>> On Sat, Jun 10, 2017 at 6:15 PM, sebb <seb...@gmail.com> wrote:
>>>>>> On 10 June 2017 at 17:22, Sam Ruby <ru...@intertwingly.net> wrote:
>>>>>>> On Sat, Jun 10, 2017 at 12:05 PM, sebb <seb...@gmail.com> wrote:
>>>>>>>> On 10 June 2017 at 16:58, Sam Ruby <ru...@intertwingly.net> wrote:
>>>>>>>>> On Sat, Jun 10, 2017 at 11:48 AM, sebb <seb...@gmail.com> wrote:
>>>>>>>>>> On 10 June 2017 at 15:57, Sam Ruby <ru...@intertwingly.net> wrote:
>>>>>>>>>>> On Sat, Jun 10, 2017 at 10:27 AM, sebb <seb...@gmail.com> 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

Reply via email to