Using Mojo::IOLoop->subprocess is working for me. Here's what I have now (adapted from the example):

get '/edit' => sub {
        my $c = shift;
        Mojo::IOLoop->subprocess(
                sub {
                        my $subprocess = shift;
                        my $result = `/usr/bin/gvim $tc_file 2>&1`;
                        return;
                },
                sub {
                        my ($subprocess, $err, @results) = @_;
                        say "Subprocess error: $err" and return if $err;
                }
        );

        $c->redirect_to('/');
};

Thank you!

On 3/9/20 9:02 PM, Stefan Adams wrote:
Would Mojo::IOLoop->subprocess <https://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#Subprocesses> work for you?  Where the example shows sleep 5, put your system call to gvim?  Not sure if that's a good solution if gvim is a long-running process, tho.  Also, try it with `perl script daemon` as opposed to using `morbo`, maybe?  Or try the systemd setup for hypnotoad <https://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#Hypnotoad>.  Is there any chance that Minion <https://mojolicious.org/perldoc/Minion> can help you here?  Minion is designed to handle long-running processes.

On Mon, Mar 9, 2020 at 8:24 PM Mike Lieman <mikelie...@gmail.com <mailto:mikelie...@gmail.com>> wrote:

    I don't think you want to use Daemon::Control.   How about a nice,
    simple fork()?

    On Mon, Mar 9, 2020 at 8:46 PM Matthew Pressly
    <matthew.pres...@gmail.com <mailto:matthew.pres...@gmail.com>> wrote:

        From a mojolicious web app, I need to be able to launch gvim
        by clicking a link or button to edit a particular file.

        Currently, I have this in the app:

            get '/edit' => sub {
            my $c = shift;
            my $result = `/usr/bin/gvim $filename 2>&1`;
            $c->redirect_to('/');
            };

        Sometimes it works, but other times, gvim runs twice when the
        link is clicked and more frequently, gvim runs but hangs up in
        the background, after which I end up killing the gvim process
        and killing and restarting the web app to get it back to working.

        Is there a way to launch gvim (or other interactive programs)
        more reliably?

        I'm using the following for a start script:

            #!/usr/bin/perl
            use warnings;
            use strict;
            use Daemon::Control;
            exit Daemon::Control->new(
                name     => "My Application",
            lsb_start   => '$syslog $remote_fs',
            lsb_stop    => '$syslog',
            lsb_sdesc   => 'My App',
            lsb_desc    => 'Controls the time tracker service.',
                #path       => '/home/symkat/etc/init.d/program',
            program     => '/usr/bin/morbo',
            program_args => [ '/path/to/mojolicious/app.pl
            <http://app.pl>' ],
            pid_file    => '/tmp/myapp.pid',
            stderr_file => '/var/log/myapp/myapp.log',
            stdout_file => '/var/log/myapp/myapp.log',

                user     => 'myuser',
                group       => 'myuser',
                fork     => 2,
            )->run;


        Thank you,

        --
        Matthew

-- You received this message because you are subscribed to the
        Google Groups "Mojolicious" group.
        To unsubscribe from this group and stop receiving emails from
        it, send an email to mojolicious+unsubscr...@googlegroups.com
        <mailto:mojolicious+unsubscr...@googlegroups.com>.
        To view this discussion on the web visit
        
https://groups.google.com/d/msgid/mojolicious/8930b24b-4e37-4b56-82ed-fad82031fe44%40googlegroups.com
        
<https://groups.google.com/d/msgid/mojolicious/8930b24b-4e37-4b56-82ed-fad82031fe44%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- You received this message because you are subscribed to the Google
    Groups "Mojolicious" group.
    To unsubscribe from this group and stop receiving emails from it,
    send an email to mojolicious+unsubscr...@googlegroups.com
    <mailto:mojolicious+unsubscr...@googlegroups.com>.
    To view this discussion on the web visit
    
https://groups.google.com/d/msgid/mojolicious/CAG2_C8CwMLwBXwVDdEicwpMYX1fvc3MHSo_CML_4Q7i%3DEHhwgg%40mail.gmail.com
    
<https://groups.google.com/d/msgid/mojolicious/CAG2_C8CwMLwBXwVDdEicwpMYX1fvc3MHSo_CML_4Q7i%3DEHhwgg%40mail.gmail.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com <mailto:mojolicious+unsubscr...@googlegroups.com>. To view this discussion on the web visit https://groups.google.com/d/msgid/mojolicious/CACyQ%2BFTkKXBF2xyCH2MZpywMEiqW1mxK9FdpfK0DGapR%2B26pbw%40mail.gmail.com <https://groups.google.com/d/msgid/mojolicious/CACyQ%2BFTkKXBF2xyCH2MZpywMEiqW1mxK9FdpfK0DGapR%2B26pbw%40mail.gmail.com?utm_medium=email&utm_source=footer>.

--
Matthew

--
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/mojolicious/52acc0c8-a40f-cbab-e347-35c0c6af0f18%40gmail.com.

Reply via email to