2012-02-08 25 views
19

Grails 2.0 thay đổi theo cách sử dụng grails.serverURL cho môi trường phát triển và thử nghiệm (như được mô tả trong manual). Tuy nhiên, tôi đã có một số problems với serverURL liên quan đến triển khai sản xuất trên Tomcat. Dường như có một vài lựa chọn cho serverURL (phương thức sản xuất):grails 2.0 - sử dụng đúng serverURL để sản xuất?

  • (Added) thiết lập này chỉ là "khói và gương", bởi vì Tomcat và Jetty có phương pháp để kiểm soát cách URL được xử lý cho các ứng dụng, xuống cấp "Ứng dụng".

  • Sử dụng nó để xác định máy chủ (như được chỉ ra như là một "TODO" trong Config.groovy)

  • Đừng sử dụng nó như được chỉ ra here bởi một trong những người đóng góp Grails, tức là "Nó nên luôn an toàn để xóa thuộc tính serverURL và để Grails tạo các url liên quan đến ứng dụng đang chạy hiện tại. " Nó không rõ ràng nếu điều này kéo dài đến sản xuất hay không (khi không tạo ra email).

  • Sử dụng phương pháp khác thay thế, cụ thể là grails.app.context, không được ghi trong sách hướng dẫn Grails 2.0, nhưng được mô tả trong tài liệu tham khảo nhất định, herehere.

Bạn có thể làm rõ việc sử dụng đúng serverURL và app.context, cho cả Jetty và Tomcat (chế độ sản xuất) không?

Cảm ơn

Trả lời

14

Vì vậy, ý tưởng cơ bản của tham số cấu hình grails.serverURL là cho phép các phương pháp CreateLink biết URL mà bạn muốn khi tạo liên kết tuyệt đối. Nếu không có tham số cấu hình grails.serverURL nào được chỉ định, nó sẽ mặc định là http://localhost:8080 (trừ khi server.port được chỉ định, sau đó 8080 sẽ là bất cứ điều gì) ...

Ngữ cảnh ứng dụng yêu cầu Jetty/Tomcat chạy ứng dụng trong một nguồn gốc. Ví dụ: chỉ định

grails.app.context="/myApp" 

sẽ đặt gốc ứng dụng của bạn thành "/ myApp". Trong chế độ sản xuất, ngữ cảnh ứng dụng được xử lý bởi vùng chứa web và chỉ thị này bị bỏ qua. Sự lựa chọn để cấu hình các cầu cảng sản xuất hoặc các trường hợp tomcat của bạn để chạy ứng dụng của bạn trong một ngữ cảnh khác nhau hoàn toàn phụ thuộc vào các yêu cầu kỹ thuật của bạn là gì. Vì vậy, điều thực sự cần xem xét là, trong ứng dụng của bạn là bạn tạo ra rất nhiều liên kết tuyệt đối trong GSP của bạn, nơi bạn cần phải xác định một "production" serverURL? Nếu không, thì bạn không cần phải xác định nó; nếu bạn đang có, sau đó bạn sẽ cần phải xác định nó.

Là một sở thích cá nhân, điều đầu tiên mà tôi luôn làm sau khi tạo dự án Grails mới là đi vào cấu hình và thay đổi grails.app.context thành "/" ... cho tôi.

Hy vọng điều này sẽ xóa mọi thứ!

+0

Cảm ơn phản hồi chi tiết. Riêng biệt nhưng có liên quan, tôi đã gặp nhiều rắc rối khi sử dụng UrlMapping theo cách đơn giản, ví dụ: để truy cập trang html thông qua đặc tả URI. Tôi tạo ra một cái gì đó như: "/ test2" (uri: "/test2.html"), nhưng sau đó grails không xác định vị trí tệp test2.html, ngay cả khi nó nằm ở đầu ứng dụng web hoặc thư mục lượt xem. Bạn có biết cách sử dụng bản đồ này không? – Ray

+0

... Tôi hiện đang làm việc này - URI. Không có ý tưởng tại sao nó không bao giờ làm việc trước đây, nhưng dường như tìm thấy các tập tin ngay bây giờ. – Ray

+0

Điều này rất hữu ích trong việc giữ cho mọi thứ nhất quán giữa sản xuất và phát triển. Cảm ơn! – haventchecked

17

Câu hỏi hay! Tôi chỉ đang tìm kiếm một cách chính xác để có được serverURL thực tế mà không cần phải cấu hình nó một cách rõ ràng trong Config.groovy (trong một ứng dụng Grails 2.1).

Vì Grails 2.0, có một lớp siêu hữu ích được gọi LinkGenerator mà bạn có thể sử dụng hầu như bất cứ nơi nào, ví dụ như trong một dịch vụ:

import org.codehaus.groovy.grails.web.mapping.LinkGenerator 

Class MyService { 
    LinkGenerator grailsLinkGenerator 

    String serverUrl() { 
     // Generate: http://localhost:8080/link-generator 
     grailsLinkGenerator.serverBaseURL 
    } 
} 

Nhờ ông Haki cho blogging về vấn đề này!

Các vấn đề liên quan