Lỗi trong trình xử lý ngoại lệ. - Laravel


118

Đó là một câu hỏi liên quan đến cài đặt Laravel. Tôi có một thiết lập máy chủ Unix công khai:

<VirtualHost *:80>
ServerAdmin webmaster@mydomain.org
DocumentRoot "/var/www/mydomain"
ServerName mydomain.org
ServerAlias www.mydomain.org
ErrorLog "/var/log/mydomain.org-error_log"
CustomLog "/var/log/mydomain.org-access_log" common
</VirtualHost>

Tôi có thể cung cấp tài liệu tốt từ / var / www / mydomain, tức là http://mydomain.org/test.php với test.php chứa:

<?php echo 'test';

hoạt động tốt.

Trong bash, với Laravel được cài đặt thông qua Composer và xem các tệp:

# ls /var/www/mydomain/my-laravel-project

.gitattributes  CONTRIBUTING.md artisan         composer.json   phpunit.xml readme.md       vendor
.gitignore      app             bootstrap       composer.lock   public          server.php

Vì vậy, khi tôi duyệt đến:

http://mydomain.org/my-laravel-project/public/

tại sao ứng dụng của tôi báo cáo:

Error in exception handler. 

trong trình duyệt - trên một màn hình trắng trống? Tôi đang mong đợi để xem màn hình giật gân Laravel.

Hơn nữa, các tệp nhật ký cũng không tiết lộ bất cứ điều gì.


Phiên bản PHP? Bạn có thể kiểm tra máy chủ của mình đăng nhập /var/logvà xem họ phải nói gì, nếu có.
Jason Lewis

3
Còn lỗi đăng nhập của Laravel thì app/storage/logssao? Và tất cả các thư mục lưu trữ có thể ghi được không?
Jason Lewis

1
@Jason Giống như bạn đã nói - đó là các thư mục lưu trữ. Một chmod -R 757 trên bộ nhớ và tôi có thể nhấn vào màn hình giật gân. +1 và cảm ơn.
cookie

Câu trả lời:


246

Tùy chọn an toàn hơn sẽ là thay đổi nhóm thư mục lưu trữ thành nhóm máy chủ web của bạn (thường là apachehoặc www-data, nhưng điều này có thể khác nhau giữa các hệ điều hành khác nhau) và giữ nguyên các quyền của thư mục 775.

chgrp -R www-data app/storage

Hoặc với chown.

chown -R :www-data app/storage

Sau đó, hãy đảm bảo quyền của thư mục 775.

chmod -R 775 app/storage

Từ trang web Laravel :

Laravel có thể yêu cầu một tập hợp các quyền được định cấu hình: các thư mục trong ứng dụng / bộ nhớ yêu cầu quyền ghi bởi máy chủ web.


14
nói chung an toàn hơn khi thay đổi chủ sở hữu nhóm đối với máy chủ web và không cấp cho "thế giới" toàn quyền truy cập vào tệp của bạn. 775 là mặc định cho các thư mục nên đủ. ứng dụng / bộ nhớ chgrp -R apache
hlev

5
Trên Mac, các lệnh trên không hoạt động. Tuy nhiên, lệnh này đã làm: sudo chown -R _www app/storage(thay thế _www với tên của bạn Apache máy chủ nếu cần thiết)
Leo Galleguillos

4
Và sau đó tôi đã phải từ bỏ nhóm quyền ghi :chmod -R g+w app/storage
Daniel AA Pelsmaeker

Cảm ơn, tôi thấy điều này hữu ích. Tuy nhiên, sau đó nó tạo ra sự cố khi bạn đang cố gắng chạy 'php Artian migrate ...' - vì thư mục '/ app / storage /' cung cấp cho bạn lỗi 'Permission Denied' - và bạn tiếp tục sửa tất cả các quyền cho chủ sở hữu 'www-data', cho đến khi bạn gặp lỗi quyền '/bootstrap/compiled.php'. Bạn cũng nên đặt điều đó thành chủ sở hữu 'www-data' hay đặt tất cả thành 0777?
peedeeaay

3
(y), đánh giá cao sự thay đổi! chmod 777 bị hủy hoại rất nhiều trẻ em thời thơ ấu :)
MA Hossain Tonu

17

Laravel 5.2

bộ nhớ chmod -R 777

Ứng dụng / lưu trữ / * của Laravel chmod 777 cũ hơn

Lưu ý rằng nếu bạn có một máy chủ chuyên dụng bị khóa hợp lý mà không có tài khoản người dùng nào khác ngoài tài khoản của bạn, 777 sẽ không gây ra bất kỳ rủi ro bảo mật nào hơn bất kỳ thứ gì khác. Sẽ phải có một số lỗ hổng khác để một người dùng độc hại lợi dụng điều đó, và tại thời điểm đó, dù sao thì quyền 777 cũng có thể được tranh luận. Tuy nhiên, nếu bạn đang ở trên một máy chủ được chia sẻ với những người dùng khác mà bạn không tin tưởng, thì bạn sẽ cần phải xem xét các quyền phức tạp hơn hoặc kiểm tra xem nhà cung cấp dịch vụ lưu trữ của bạn đã cung cấp cách ly chưa.

Họ thực sự nên đưa điều này vào tài liệu bắt đầu nhanh và cung cấp các ví dụ cho các thiết lập khác nhau. Bạn cũng có thể phải chạy lại nó sau lần tải đầu tiên vì nhiều thư mục được tạo tự động. Tìm trong nhật ký của bạn để tìm lỗi ghi.

Ngoài ra DocumentRoot của bạn phải là / path / to / laravel-project / public


4
Đồng ý, hay vẫn tốt hơn một hơn dài dòng thông báo lỗi
homerjam

3
Họ không nên yêu cầu bạn truy cập www.domain.com/project/public vì đó không phải là cách chính xác để chạy ứng dụng Laravel. Bạn nên thiết lập máy chủ web của mình để phục vụ public / * và không có gì khác, với public / index.php là điểm vào duy nhất cho toàn bộ ứng dụng. Bạn có thể làm điều đó rất dễ dàng với Apache; nếu bạn đang sử dụng nginx thì bạn có thể biết mình đang làm gì. Và nếu bạn đang sử dụng một máy chủ cPanel giá rẻ (xin chia buồn), bạn cũng có thể dễ dàng thiết lập web gốc để trỏ tới công khai.
bữa sáng từ

11
nghiêm túc cho thấy 777 chỉ là sự vi phạm rõ ràng các nguyên tắc an ninh ...
ftrotter

1
Tôi biết nó đã được một năm tuổi nhưng 777 là cách tồi tệ nhất để làm điều này, nó phá vỡ mọi quy tắc bảo mật như @ftrotter đã nói.
Zac Grierson

2

Tôi đã xóa các phiên cũ bên trong app/storage/sessionsthư mục và cấp 775quyền app/storagesau đó nó hoạt động như lửa!

chmod -R 775 app/storage

Chúc may mắn!


1

Vấn đề này đã xảy ra từ lâu, nhưng tôi vẫn có một lời khuyên khác liên quan đến "Lỗi trong trình xử lý ngoại lệ."

Tôi đã có điều này xảy ra với tôi khi tôi chạy "php artistan", đây là một cách tốt để đánh giá xem môi trường của bạn có đang hoạt động nói chung hay không.

Tôi đã chạy nó và nó cho tôi lỗi đó và tôi không thể xác định chính xác vấn đề cho đến khi tôi chỉnh sửa tệp thủ công trong thư mục gốc của dự án của mình và thêm câu lệnh try catch:

try {
    $artisan = Illuminate\Console\Application::start($app);
}
catch (Exception $e)
{
    dd($e->getMessage());
}

Tại thời điểm đó, tôi cuối cùng đã nhìn thấy một thông điệp tuyệt vời:

string(41) "Connection refused [tcp://127.0.0.1:6379]"

mà trong trường hợp của tôi là một cấu hình redis xấu, nhưng trong trường hợp của bạn có thể là bất cứ thứ gì.

Tôi hy vọng điều này sẽ giúp ai đó, hoặc ít nhất lần sau khi tôi đến đây, tôi sẽ tìm thấy câu trả lời cho riêng mình.


Cảm ơn. Tôi đã phát hiện ra vấn đề của mình bằng cách sử dụng cái này - Nó đã được in could not find driver. Và sau đó tôi phát hiện ra mình đã cài đặt php-mysql, trong khi php7.0-mysqlđược yêu cầu. Liên kết này cũng giúp tôi - digitalocean.com/community/tutorials/…
Udayraj Deshmukh

0

Cách ngắn nhất để giải quyết vấn đề này là bắt đầu làm thủ công với sudo. Điều này sẽ cung cấp cho nghệ nhân tất cả các quyền mà nó cần và cũng sẽ không gây ra bất kỳ rắc rối nào về bảo mật.

vì vậy, thay vào đó hãy bắt đầu phục vụ nghệ nhân với:

$ php artisan serve

thử sử dụng:

$ sudo php artisan serve 

do đó bạn sẽ không phải thực hiện bất kỳ thay đổi quyền nào


-5

Tôi gặp sự cố tương tự, tôi chỉ thay đổi quyền từ ứng dụng / bộ nhớ thư mục thành 775 bằng dòng lệnh chmod


5
Điều này đã được chỉ ra trong câu trả lời chấp nhận hiện nay (và sẽ cần những thông tin từ đó câu trả lời về cách thiết lập các nhóm của thư mục một cách chính xác để có một câu trả lời hoàn toàn chính xác.)
Matt Gibson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.