Tại sao tomcat thích xóa tệp ngữ cảnh của tôi?


24

Tôi đang phát triển một ứng dụng Java dựa trên web tại nơi làm việc và (rõ ràng) phải chạy nó cục bộ trong quá trình phát triển. Tôi đã tìm ra các tài liệu Tomcat và có một tệp bối cảnh phù hợp /etc/tomcat6/Catalina/localhost/nhưng thường xuyên, Tomcat quyết định xóa nó! Điều đó có nghĩa là tôi phải đặt nó trở lại và khởi động lại Tomcat.

tại sao nó làm vậy? Tôi đã tìm kiếm các tài liệu Tomcat về nó và không ai khôn ngoan hơn.

(Ồ vâng: nó không thực sự được gọi context.xmlnhưng owners.xmlvì đó là tiền tố đường dẫn HTTP cho ứng dụng này.)

Cập nhật

Bây giờ tôi đã thấy Tomcat xóa tệp trong khi Tomcat đang chạy . Tôi nghĩ rằng tôi cần phải nộp một lỗi ...


Có vấn đề này để. Có vẻ như khi bạn thay thế cuộc chiến của mình, nó gây ra sự thiếu triển khai của ứng dụng gây ra việc xóa tệp ngữ cảnh. Tôi không có cách giải quyết nhưng rất thích có một cái thuận tiện hơn là có thể tải lại = false stackoverflow.com/questions
4032773 / trộm

Câu trả lời:


18

Tóm tắt nhanh : có một số điều kiện (như thay đổi tệp chiến tranh, xóa webapp hoặc thay thế nó bằng nội dung mới), theo đó tomcat sẽ triển khai bối cảnh bao gồm xóa tệp ngữ cảnh.

Chi tiết : Việc tomcat có hay không thực hiện autoDeployment (có nghĩa là kiểm tra các thay đổi trong bộ mô tả .xml của bạn cũng như kiểm tra các thay đổi trong thư mục ứng dụng web) được điều khiển bởi:

  1. server.xml được bản địa hóa trong phần $ CATALINA_HOME / conf / server.xml:

    <Tên máy chủ = "localhost" appBase = "webapps" unpackWARs = "true" autoDeploy = "true" xmlValidation = "false" xmlNamespaceAware = "false">

  2. Bạn cũng có thể đặt thuộc tính này trong tệp ngữ cảnh của mình quá tải giá trị

Trích dẫn tài liệu cho các trường hợp khi autoDeploy = true có thể gây ra việc xóa tệp ngữ cảnh của bạn:

  • Xóa một tệp WAR sẽ kích hoạt một ứng dụng không triển khai với việc loại bỏ bất kỳ thư mục mở rộng, tệp ngữ cảnh và thư mục công việc được mở rộng liên quan .
  • Xóa một thư mục sẽ kích hoạt một ứng dụng không triển khai với việc loại bỏ bất kỳ tệp ngữ cảnh liên quan và thư mục công việc.
  • Cập nhật tệp WAR sẽ kích hoạt ứng dụng không triển khai với việc xóa bất kỳ thư mục mở rộng, tệp ngữ cảnh và thư mục công việc được liên kết .
  • Cập nhật một thư mục (không phải nội dung thư mục) sẽ kích hoạt một ứng dụng không triển khai với việc loại bỏ bất kỳ tệp ngữ cảnh liên quan và thư mục công việc.

Chi tiết đầy đủ : http://tomcat.apache.org/tomcat-6.0-doc/config/host.html#Automatic%20Application%20Deployment


Đây không phải là một câu trả lời hoàn chỉnh - xem serverfault.com/faq#deletion
Jenny D nói Phục hồi lại

:) hãy tự giúp mình (có vẻ như cú pháp tô sáng hoạt động hơi khác so với trong stackoverflow đã xóa một phần câu trả lời trước đó)
Jan Zyka

Vấn đề là nếu bạn chỉ cần thêm một liên kết, mục tiêu của liên kết có thể biến mất, làm cho câu trả lời trở nên vô dụng. Đó là lý do tại sao serverfault.com khuyến khích bạn đăng câu trả lời thực tế thay vì chỉ liên kết. Và khi tôi bình luận, phần còn lại của văn bản không thể nhìn thấy. Tôi vẫn khuyên bạn nên thực sự đăng một phản hồi đầy đủ hơn là một bản tóm tắt ngắn gọn về liên kết.
Jenny D nói Phục hồi lại

1
Điều đó đơn giản là không đúng sự thật. Câu trả lời ban đầu chứa (và vẫn không) tóm tắt ngắn gọn về những gì bạn có thể tìm thấy dưới liên kết. Không có liên kết, câu trả lời vẫn có ý nghĩa hoàn hảo và cùng với liên kết bạn có thể tìm thấy chi tiết.
Jan Zyka

Nhưng tôi đã không có ý định gây khó chịu nên rất tiếc nếu nó có vẻ như vậy :) Tôi không biết nhiều về web này, chỉ là giải quyết tương tự và muốn chia sẻ.
Jan Zyka

5

Nếu bạn không muốn tính năng autoDeploy , chẳng hạn trong môi trường sản xuất, bạn có thể xem xét các thuộc tính sau trong tệp ngữ cảnh conf / Catalina / localhost:

  • autoDeploy = "sai"
  • và triển khaiXML = "sai"

autoDeploy = "false" có thể không hoạt động một mình vì bối cảnh ứng dụng (trong META-INF) có thể ghi đè cài đặt server.xml của autoDeploy.

  • META-INF / bối cảnh của ứng dụng sẽ được sử dụng trong môi trường phát triển, với autoDeploy
  • Bối cảnh conf / Catalina / localhost trong sản xuất, không có autoDeploy.

Tài liệu thuộc tính tài liệu thuộc tính triển khai MLX đáng để đọc (§ Thực hiện chuẩn).

Trường hợp người dùng autoDeploy đầy đủ và khi bối cảnh bị xóa: tức là ứng dụng không được triển khai, trường hợp người dùng được ghi lại có thể được tìm thấy ở đây .


2

Không thể trả lời bit Why .

Tuy nhiên, liên kết này khẳng định bạn có thể ngăn chặn điều này bằng cách thiết lập autoDeploy="false"trongserver.xml


1
Trong tomcat7 autoDeploy = "false" không tạo ra sự khác biệt :(
Joseph Lust

1

Tôi thực sự không biết lý do đằng sau Tomcat làm điều này là gì nhưng hãy thử thêm thuộc tính XML sau vào thành phần ngữ cảnh của bạn

reloadable="false"

Vì vậy, bối cảnh của bạn có thể trông giống như thế này:

<Context path="/" docBase="/some/path/name" reloadable="false">
<!-- Context related stuff -->
</Context>

Điều này sẽ ngăn Tomcat xóa tập tin


Thật không may, điều đó làm cho việc phát triển trở nên khó khăn hơn khi tôi phải khởi động lại Tomcat sau mỗi lần xây dựng.
staticsan

kiểm tra jrebel để giúp phát triển điều này: zeroturnaround.com/jrebel
harmanjd

0

Tôi nhận ra đây là một chủ đề cũ, nhưng tôi nghĩ rằng tôi sẽ chia sẻ những gì tôi tìm thấy để khắc phục vấn đề này ...

Tôi đã gặp vấn đề tương tự chính xác với tệp ngữ cảnh của tôi đối với phiên bản tomcat trên máy tính để bàn của tôi bị ghi đè mỗi khi tôi sẽ triển khai một bản sao mới của tệp chiến tranh cho ứng dụng của mình.

Vấn đề là do tôi đã thực hiện thay đổi tệp này trực tiếp trên hệ thống tệp. Điều đã khắc phục vấn đề là chỉnh sửa tệp ngữ cảnh thông qua trình soạn thảo Eclipse của tôi. Bên trong Eclipse của tôi, có một dự án "máy chủ" mà khi bạn mở rộng nó, bạn có thể thấy một số tệp, chẳng hạn như bối cảnh và tệp tin DOM. Có vẻ như nếu bạn sửa đổi các tệp từ đây thay vì đi ra hệ thống tệp, các thay đổi của bạn sẽ được giữ nguyên.

Tôi tìm thấy giải pháp này trong chuỗi sau: https://www.liferay.com/community/forums/-/message_boards/message/16511799

Tôi mong điều này giúp được người nào khác!

-Sau đó


0

Vấn đề chung như được mô tả bởi tiêu đề được đề cập trong Tái triển khai từ chiến tranh mà không xóa bối cảnh vẫn là một vấn đề mở tại thời điểm này.

Có một sự khác biệt được thừa nhận giữa việc triển khai lại mà không xóa bối cảnh và triển khai sau khi không triển khai trong đó việc không triển khai sẽ xóa bối cảnh. Tài liệu đã hết hạn và GUI của người quản lý vẫn không hỗ trợ triển khai lại.


-1

Đôi khi, nó có các giá trị khác nhau cho ứng dụng trong máy chủ, ví dụ: đường dẫn để lưu trữ các tệp đã tải lên. Trong môi trường nhà phát triển mabe, chúng ta có một cái gì đó như thế này:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" reloadable="false">
     <Parameter name="rutaTrabajo" value="C:\Larry\Proyectos\app\rutaTrabajoxx" override="true"/>
</Context>

Nhưng trong máy chủ thì đường dẫn lại khác:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/App/rutaTrabajo" override="true"/>
</Context>

Tôi cũng gặp vấn đề tương tự, tomcat xóa bối cảnh (m áp tệp) từ conf / Catalina / localhost

Để giải quyết, tôi sử dụng context.xml.default, trong cùng một đường dẫn, tôi tạo một tệp có tên là context.xml.default và bên trong một cấu hình put mà tôi muốn giữ:

 cat context.xml.default
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/ParkiMeApp/rutaTrabajo" override="true"/>
</Context>

Vì vậy, khi triển khai lại ứng dụng, các tham số xác nhận vẫn cò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.