2013-04-03 29 views
6

Tôi có một ứng dụng đang chạy trên Openshift. Nó hoạt động tốt, nhưng thử nghiệm là khó khăn bởi vì tôi phải đẩy mọi thứ nhỏ để mở ra và chờ cho tất cả các tòa nhà và khởi động lại để xem những thay đổi.Thử nghiệm ứng dụng openhift mùa xuân tại địa phương

Vì vậy, tôi đang cố gắng tìm cách thử nghiệm ứng dụng cục bộ. Một anh chàng khác cũng hỏi điều tương tự ở đây: How to test an openshift application on local host, nhưng tôi tự hỏi liệu có một giải pháp dễ dàng hơn không.

Tôi đã sử dụng dự án khởi động nhanh tại đây http://github.com/openshift/spring-eap6-quickstart.git để bắt đầu. Vì vậy, về cơ bản nó là một ứng dụng Spring sử dụng Hibernate.

gì tôi có trong tâm trí để có hai bộ các tập tin cấu hình (persistence.xml vv) trong dự án, một cho máy chủ Tomcat địa phương và một cho Jboss eap và thay đổi web.xml theo máy chủ tôi muốn triển khai. Điều này có thể thực hiện được không? Trông rất đơn giản, tôi sợ bất kỳ vấn đề bất ngờ nào trước khi thay đổi dự án .

+0

Đề xuất từ ​​adietisheim có lẽ là tốt nhất và cách tiếp cận của bạn cũng có vẻ tốt. Hãy thử với một dự án đơn giản. –

Trả lời

3

Đây là cách tôi kết thúc. Tôi đã đổi tên tệp gốc web.xml, với một cái gì đó như web-openshift.xml. Khi các dự án được xây dựng trong OpenShift, cấu hình của maven openshift được sử dụng. Bạn có thể tìm thấy nó trong phần <profiles> của bạn trong tệp pom.xml. Vì vậy, tôi đã thêm một dòng vào pom.xml tôi:

<build> 
    <plugins> 
    <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <configuration> 
     .... 
      <webXml>src/main/webapp/WEB-INF/web-openshift.xml</webXml> <!--add this--> 

Điều này làm cho maven-war-plugin sử dụng các tập tin web-openshift.xml như mô tả triển khai web khi xây dựng chiến tranh. Sau đó, tôi đã thêm một tệp web.xml, tệp này sẽ được sử dụng cho bản dựng cục bộ của tôi. Trong những tập tin mà bạn cấu hình servlet của bạn với:

<init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/jboss-as-spring-mvc-context.xml</param-value> 

Vì vậy, bằng cách thay đổi <param-value> trong hai web.xml tác phẩm của tôi, tôi đã có thể cấu hình Spring và Hibernate trong nhiều cách khác nhau.

Sau đó, tôi đã thêm các lọ được đánh dấu là <provided> trong pom.xml vào thư mục \lib cài đặt Tomcat của tôi. Bây giờ tôi có thể triển khai và chạy ứng dụng cả OpenShift và Tomcat.

0

Nếu bạn có kết nối nhanh, bạn có thể chạy ứng dụng của mình trên máy chủ cục bộ và để cho persistence.xml trỏ tới db mở. Để truy cập db từ xa, bạn sẽ phải sử dụng cổng chuyển tiếp (https://www.openshift.com/blogs/getting-started-with-port-forwarding-on-openshift). Bạn sẽ cần thiết lập trình khách rhc (https://www.openshift.com/developers/rhc-client-tools-install) và chạy trình khách chuyển tiếp cổng rhc để truy cập cơ sở dữ liệu. Sau đó bạn có thể chỉ cần chạy dự án eclipse trên máy chủ tomcat của bạn, và nó sẽ (với persistence.xml Tôi giả sử bạn đang sử dụng một db) kết nối với cơ sở dữ liệu. Bất kỳ thay đổi mã nào cũng sẽ được xử lý giống như bất kỳ dự án tomcat nào khác. Không cần phải có một tệp web.xml riêng biệt cho hầu hết các trường hợp (trừ khi bạn có một số cấu hình cụ thể mở rộng).

Bạn thậm chí có thể sử dụng các công cụ như Toad để kết nối với db nếu bạn muốn.

+0

Cảm ơn, điều này có vẻ đầy hứa hẹn, nhưng tôi nghĩ rằng tôi vẫn sẽ cần hai cấu hình khác nhau cho sự kiên trì. Ví dụ để phát triển cục bộ, tôi cần đặt 'hibernate.show_sql = true' – lunr

0

Trong một ứng dụng mà tôi đã chạy cả cục bộ và trên Openshift, tôi đã sử dụng thư mục app-root/data liên tục để lưu trữ bất kỳ cấu hình OpenShift cụ thể nào.

Trong web của tôi.xml, tôi bao gồm các thuộc tính như sau:

<context:property-placeholder location="file:${user.home}/app-root/data/configuration.properties"/> 

Nếu bạn quản lý các thuộc tính cấu hình nhạy cảm như tên người dùng và mật khẩu, các biến env của Openshift có thể đi một chặng đường dài. Ví dụ, bạn có thể đặt các thuộc tính sau trong pom.xml của bạn, dưới hồ sơ cá nhân OpenShift:

<properties> 
    <db.username>${env.OPENSHIFT_POSTGRESQL_DB_USERNAME}</db.username> 
    <db.password>${env.OPENSHIFT_POSTGRESQL_DB_PASSWORD}</db.password>      
    <db.connectionURL>postgresql://${env.OPENSHIFT_POSTGRESQL_DB_HOST}:5432/${env.PGDATABASE}</db.connectionURL> 
</properties> 

Để lấy thuộc tính kết nối cơ sở dữ liệu của bạn từ các biến môi trường OpenShift. Sau đó, bạn có thể sử dụng tính năng lọc tài nguyên của maven để đưa các thuộc tính này vào bất kỳ tệp nào trong các thư mục cụ thể như src/main/resources

Thuộc tính kết nối db cục bộ của riêng tôi được quản lý trong hồ sơ trong tệp ~/.m2/settings.xml của tôi.

Cách tiếp cận này cho phép tôi để:

  • giữ tất cả các đặc tính nhạy cảm ra khỏi mã công cộng của tôi kho
  • rất đơn giản chuyển đổi giữa OpenShift và triển khai tại địa phương bằng cách cho phép/vô hiệu hóa maven xây dựng hồ sơ.
Các vấn đề liên quan