2016-01-10 1:48 GMT-06:00 Stefan Hornburg (Racke) <racke@linuxia.de>:
On 01/10/2016 03:35 AM, Richard Reina wrote:
This code works (the file uploads) when I run it from my web app on my local host. However, it does not when I try it on the digitalocean version of my app. I get no errors and $file->copy_to($destination) returns true. But the file does not upload. Anyone have an idea as to what the problem could be?
post '/upload' => sub {
my $user_id = session 'UID'; my $d_filename = 'user_' . $user_id . '.jpg';
my $file = request->upload('file'); my $tmpname = $file->tempname; my $destination = $upload_dir . '/' . $d_filename; my ($crslt) = $file->copy_to($destination) || warn $!; unlink $tmpname if -e $tmpname;
debug "crslt: ", $crslt;
template 'upload';
redirect '/playerdash'; };
Where did you define $upload_dir and what is the value of it?
Regards Racke
Racke and Gabor, Thank you very much for the replies. $upload_dir was being set just before the get route -- which I realize is not correct so I have now put it in the post route like below and the results are the same. Both machines run perl (v5.20.2). On the development machine I start Dancer2 with: plackup -r bin/app.psgi On the production machine: service starman start; which uses argument: '/home/starman/Almslete/bin/app.psgi (see starman.pl below) Gabor I followed your excellent tutorial: http://perlmaven.com/getting-started-with- perl-dancer-on-digital-ocean post '/upload' => sub { my $upload_route = '/upload'; my $upload_dir = 'public/profile_pics'; my $user_id = session 'UID'; my $d_filename = 'user_' . $user_id . '.jpg'; my $file = request->upload('file'); my $tmpname = $file->tempname; debug "File Size: ", $file->size; debug "file: ", $file->filename; debug "tmpname: ", $file->tempname, my $destination = $upload_dir . '/' . $d_filename; debug "Destination: $destination\n"; my ($crslt) = $file->copy_to($destination) || warn $!; #unlink $tmpname if -e $tmpname; debug "crslt: ", $crslt; template 'upload'; redirect '/playerdash'; }; /home/starman/starman.pl #!/usr/bin/perl use warnings; use strict; use Daemon::Control; use Cwd qw(abs_path); Daemon::Control->new( { name => "Starman", lsb_start => '$syslog $remote_fs', lsb_stop => '$syslog', lsb_sdesc => 'Starman Short', lsb_desc => 'Starman controls the web sites.', path => abs_path($0), #program => 'plackup -E deployment -s Starman', program => '/usr/local/bin/starman', program_args => [ '--workers', '3', '/home/starman/Almslete/bin/app.psgi' ], #plackup -E deployment -s Starman --workers=10 -p 5001 -a bin/app.psgipl user => 'starman', group => 'starman', pid_file => '/tmp/starman.pid', stderr_file => '/tmp/starman.err', stdout_file => '/tmp/starman.out', fork => 2, } )->run; Thanks again for the help.