By taobad
I’ve just deployed my laravel app on Digitalocean. My upload image and the send email which worked perfectly fine on my local server doesn’t work on the server. After debugging, I realized the problem is with this two lines facades.
Mail::send('emails.contact', $data, ....
Image::make($image);
$image is the image gotten from the post request.
My folder has a write permission for the web group. so I’m sure it isn’t a permission problem. Besides, I have commented the save line out and I am still getting the error. Please help. Thanks. Here is my controller code
$images = $request->file('images');
$imageEmpty = array_filter($images);
if(!(empty($imageEmpty))){
//$images = $request->file('images');
$filePath = 'img/posts/'.$post->id.'/';
File::makeDirectory(public_path($filePath));
foreach ($images as $image){
$filename = $image->getClientOriginalName();
//Image::make($image)->resize(500,500)->save(public_path($filePath.$filename));
$img = new Img;
$img->name = $filename;
$post->images()->save($img);
Image::make($image); //->save(public_path($filePath.$filename));
}
Here is my send mail code
public function postContact(Request $request)
{
$this->validate($request,[
'email'=>'required|email',
'message' => 'min:10',
'subject' => 'min:10'
]);
$data = array(
'email' => $request->email,
'bodyMessage' => $request->message,
'subject' => $request->subject
);
Mail::send('emails.contact', $data, function($message) use ($data){
$message->from($data['email']);
$message->to('badmustaofeeq@gmail.com');
$message->subject($data['subject']);
});
Session::flash('success',' Email was sent successfully!');
return redirect()->route('contact.get');
}
}
Here is my stacktrace
[2016-09-07 22:10:26] production.ERROR: ReflectionException: Class App\Http\Controller$ Stack trace: #0 /var/www/laravel/bootstrap/cache/compiled.php(8572): ReflectionMethod->__construct($ #1 /var/www/laravel/bootstrap/cache/compiled.php(8281): Illuminate\Routing\Route->sign$ #2 /var/www/laravel/bootstrap/cache/compiled.php(8275): Illuminate\Routing\Router->sub$ #3 /var/www/laravel/bootstrap/cache/compiled.php(8266): Illuminate\Routing\Router->sub$ #4 /var/www/laravel/bootstrap/cache/compiled.php(8212): Illuminate\Routing\Router->fin$ #5 /var/www/laravel/bootstrap/cache/compiled.php(8207): Illuminate\Routing\Router->dis$ #6 /var/www/laravel/bootstrap/cache/compiled.php(2419): Illuminate\Routing\Router->dis$ #7 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\$ #8 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): $ #9 /var/www/laravel/bootstrap/cache/compiled.php(3286): Illuminate\Routing\Pipeline->I$ #10 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode$ #11 /var/www/laravel/bootstrap/cache/compiled.php(9963): call_user_func_array(Array, A$ #12 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(O$ #13 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32):$ #14 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Obj$ #15 /var/www/laravel/bootstrap/cache/compiled.php(9948): call_user_func(Object(Closure$ #16 /var/www/laravel/bootstrap/cache/compiled.php(2366): Illuminate\Pipeline\Pipeline-$ #17 /var/www/laravel/bootstrap/cache/compiled.php(2350): Illuminate\Foundation\Http\Ke$ #18 /var/www/laravel/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(O$ #19 {main
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Accepted Answer
The stacktrace doesn’t seem to give us much to go on. Based on the fact that this code worked properly on your build system but not on your droplet lets work under the assumption that this error is caused by a difference in the environment and not the code itself.
Without having this narrowed down to just one of those two functions there are a few possibilities.
Mail PHP’s mail functionality requires you have a local MTA on your system. Doing apt-get install postfix
or apt-get install sendmail
would meet those requirements and allow PHP applications to send emails.
Image - image manipulation in PHP usually requires additional libraries such as php7.0-gd or php7.0-imagick which do the heavy lifting. You can install these with apt-get install php7.0-imagick php7.0-gd
There are a couple other possibilities you can check if these changes to not resolve the issue.
Is your local server using Ubuntu 16.04 with PHP 7? 16.04 was the first Ubuntu release to use PHP 7 by default. Older versions use PHP 5.x
While I would think that the error would be more obvious if this were the problem the line File::makeDirectory(publicpath($filePath));
could be a potential point of failure if the user running the web service (www-data by default on Ubuntu) does not have appropriate permissions to the directory. You can ensure this by doing a chown -Rf www-data:www-data /path/to/directory
where /path/to/directory is the path to the location where these folders will be created.
If these fail to resolve the issue or you encounter other problems with your deployment let us know.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.