Chế độ nhà phát triển trên môi trường sản xuất


7

Gần đây tôi đã được một khách hàng liên hệ để đánh giá cửa hàng Magento của họ. Tôi nhận ra rằng cửa hàng (ngay cả khi đang chạy trong sản xuất) đã bật chế độ nhà phát triển trong index.phptệp của họ :

if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) { //the variable is set.
    Mage::setIsDeveloperMode(true);
}

Họ đã điều hành cửa hàng này trong hơn 2 năm. Tôi đã khôi phục bản sửa đổi sớm nhất của tệp từ 2013 / 02-09 và nó vẫn có chế độ nhà phát triển được đặt thành đúng.

Sau khi đọc bài viết này của Alan Storm: Xử lý lỗi PHP và Chế độ nhà phát triển Magento tôi thực sự không thể nghĩ ra lý do nào để khuyên khách hàng tắt chế độ nhà phát triển.

Có bất kỳ khía cạnh bất lợi nào của việc kích hoạt nó trong sản xuất không?

Gói của Alan Storm:

Chế độ nhà phát triển sẽ giúp bạn viết mã sạch hơn mà không khiến người dùng của bạn mắc các lỗi PHP khó xử khi có sự cố.

Có vẻ khá tích cực đối với tôi. Theo nguyên tắc thông thường, trước đây tôi chỉ không đưa môi trường sản xuất vào chế độ nhà phát triển.


3
trong chế độ sản xuất, chế độ nhà phát triển nên tắt. Nếu không, các lỗi thông báo php nhỏ cũng sẽ được hiển thị ở lối vào. Nếu chế độ nhà phát triển tắt, thì các lỗi phía trước của người dùng chỉ hiển thị ở lối vào và các lỗi / thông báo / cảnh báo chi tiết về php sẽ được ghi lại.
Rajeev K Tomy

2
Tôi có thể đang thiếu một cái gì đó ở đây, nhưng những gì bạn đã liệt kê là trong Magento lõi mặc định cho index.php - vì vậy tất nhiên một phiên bản trước đó của tệp này có cùng một khối mã trong đó. Bạn đang thấy câu lệnh "IF" để bật chế độ nhà phát triển (tắt theo mặc định). Họ có thực sự có biến môi trường được đặt ở cấp vhost hoặc trong .htaccess không? Nếu họ không có bộ biến $ _SERVER, chế độ nhà phát triển sẽ không được bật ...
Douglas Radburn

À, xin lỗi :) Biến được đặt.
Moose

Câu trả lời:


8

Hầu hết các nhà phát triển có xu hướng phản hồi ngay lập tức nói rằng thật tệ khi bật chế độ nhà phát triển trên máy chủ sản xuất như thể đây là sự thật. Tôi nghĩ rằng điều này là khác nhau cho mỗi tình huống / webshop.

Điều gì xảy ra khi bạn bật chế độ nhà phát triển?

  1. mageCoreErrorHandler() sẽ ném tất cả các lỗi thay vì đăng nhập chúng
  2. Magento sẽ đưa ra lỗi trong một số tình huống trong đó thông thường sẽ âm thầm bỏ qua lỗi này và tiếp tục
  3. Mage::log() sẽ luôn ghi vào nhật ký ngay cả khi tắt đăng nhập
  4. In ngoại lệ sẽ hiển thị dấu vết mã trên màn hình thay vì hiển thị trang báo cáo lỗi
  5. Những điều nhỏ nhặt khác trong việc bỏ qua các bản cập nhật mô-đun, bộ đệm trang doanh nghiệp, ....

Đây có phải là xấu trên một máy chủ sản xuất?

  1. Khách truy cập trang web của bạn cuối cùng sẽ có tất cả các loại vô nghĩa có thể gây nhầm lẫn cho họ và do đó có thể có tác động tiêu cực đến chuyển đổi trang web của bạn
  2. Không thấy. 1
  3. Trên máy chủ sản xuất, nhiều khả năng bạn sẽ có nhiều lượt xem trang hơn so với máy chủ thử nghiệm. Điều này có thể có nghĩa là nếu bạn đã đăng nhập (hoặc chế độ nhà phát triển được bật) thì nhật ký của bạn có thể bị ngập.
  4. Đây là một trong những có thể có hại . Nếu dấu vết ngoại lệ của bạn được in, thì chúng có thể chứa thông tin cụ thể có thể có giá trị đối với những người có ý định xấu.
  5. ...

Trên 5 điểm này, tôi có thể nói họ phụ thuộc rất nhiều vào tình hình trang web trực tiếp của bạn. Khán giả của bạn là gì? Họ có sợ hãi và bỏ chạy khi nhìn thấy các ngoại lệ và dấu vết của PHP không? Trang web của bạn có bao nhiêu lượt xem trang? Thông tin nào có thể bị rò rỉ với backtraces bán phá giá?

Khi đọc tất cả những điều trên, người ta thường có thể nói rằng không nên bật chế độ nhà phát triển trên máy chủ sản xuất "như một quy tắc chung";).

Nhưng nó có phải là một "điều tồi tệ" không? ...


Tôi muốn nói, số 4 (và cả 1) làm cho nó trở thành một điều tồi tệ, không có if và buts, chỉ đơn giản là vì lý do bảo mật.
Fabian Schmengler 17/8/2016

Làm cách nào tôi có thể kích hoạt chế độ nhà phát triển chỉ cho địa chỉ IP của mình?
zus

3

Đó là too harmful to enable developer mode on a production serverbất cứ ai can see your site's errors and system folder path . Rất nhiều hệ thống details are printed to the browser screen và điều đó làm cho nóvery harmful for your site.

Nó sẽ là ý tưởng tốt để enable for developer code for specific ips.Just putting condition at index.php

$clientIp = $_SERVER['REMOTE_ADDR'];

if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) && ($clientIp == '123.123.123.123')) {
    Mage::setIsDeveloperMode(true);
} 

Điều này sẽ cho phép chế độ nhà phát triển chỉ dành cho IP của nhà phát triển.

Nhược điểm của nhà phát triển cho phép

Lưu lượng khách hàng : khách hàng trở thành irritate because of site print Errordon't goto not any next page. Điều đó làm cho tỷ lệ thoát trang web cao.

Kinh doanh: cho trang web tỷ lệ thoát cao Business goes to down.

Tốc độ trang web : trang web trở thành slow for every timenhật ký printed on system.log and exception.log.

giải pháp

Giải pháp là stage servetôi đang đề nghị

1. tạo: create stage

2. Chế độ Dev: kích hoạt all developer mode trên hệ thống sân khấu.

  1. Sửa lỗi: Kiểm tra lỗi và sẽ sửa mã

  2. Tải lên Sản xuất: sau đó tải mã sửa lỗi lên máy chủ sản phẩm.


Cảm ơn Amit. Thật không may, tất cả các mạng Nam Phi hoạt động thông qua các địa chỉ IP động (thường thay đổi hàng ngày) trái ngược với các địa chỉ IP tĩnh (không đổi).
Moose

1
@moose, bạn có thể thử khớp $clientIpvới một mảng ( in_array($clientIp, array(/* IP's */))) hoặc bạn có thể thử khớp một phần nhất định của IP với mặt nạ bit. Đây không phải chủ đề cho SE này và hơi rộng cho bình luận này, vì vậy hãy thử Google.
7ochem

2
7ochem, bạn là người kiểm tra chính tả tốt :)
Amit Bera

0

Điều đó là sai, tất cả các tài liệu trực tuyến về chủ đề này là về cách chỉnh sửa tệp index.php xung quanh "if (isset ($ _ SERVER ['MAGE_IS_DEVELOPER_MODE']) ..", Trong khi trên thông tin tệp Magento khuyến nghị: " * Không chỉnh sửa hoặc thêm vào tệp này nếu bạn muốn nâng cấp Magento lên mới hơn. "

Câu trả lời đơn giản là bạn phải đặt hoặc không giá trị của $ _SERVER ['MAGE_IS_DEVELOPER_MODE'] dưới dạng chỉ thị apache hoặc nginx.

Đối với apache, hãy thêm dòng này vào tệp .htaccess gốc nếu bạn muốn chế độ nhà phát triển: SetEnv MAGE_IS_DEVELOPER_MODE true

Đối với nginx, hãy chỉnh sửa dòng này trên nginx.conf nếu bạn muốn chế độ nhà phát triển: đặt $ MAGE_MODE mặc định; # hoặc sản xuất hoặc nhà phát triển

( https://github.com/magento/magento2/blob/2.3-develop/nginx.conf.sample )

Tập tin root index.php là một tập tin lõi khung và phải được giữ nguyên.

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.