2011-11-21 28 views
5

Tôi muốn có thể mô tả một đường ray jruby 3.1 ứng dụng cho Heroku.Làm thế nào để triển khai JRuby Rails 3.1.x trên Heroku

Heroku hiện hỗ trợ Java: http://blog.heroku.com/archives/2011/08/25/java/ Giả sử, có thể triển khai ứng dụng đường ray JRuby. Có một hướng dẫn ở đây cho java đơn giản: http://devcenter.heroku.com/articles/java và khác ở đây: http://devcenter.heroku.com/articles/spring-mvc-hibernate

Dưới đây là một hướng dẫn cho một ứng dụng JRuby Sinatra trên Heroku: http://chris.chowie.net/2011/08/28/Sinatra-with-JRuby-on-Heroku/ Để có được điều này để làm việc, tôi đã sử dụng ruby ​​phi JRuby khi chạy Heroku , như heroku bị treo nếu rvm sử dụng jruby.

Để chạy lệnh

mvn package 

tôi phải chạy này:

bundle --gemfile=/home/justin/github/sinatra-jruby-heroku/Jemfile install temple 
bundle --gemfile=/home/justin/github/sinatra-jruby-heroku/Jemfile update 

tôi tạo ra các ứng dụng:

heroku create jg1-sinatra --stack cedar 

Tôi đẩy các tập tin để Heroku, nhưng khi ứng dụng bắt đầu, nó đã bị lỗi. ? :(

Bất cứ lời khuyên tôi đoán rằng nó sẽ không bao lâu nữa Heroku có một hướng dẫn về vấn đề này

tập tin Log từ Heroku:.

2011-11-21T08:30:40+00:00 heroku[slugc]: Slug compilation started 
2011-11-21T08:31:17+00:00 heroku[api]: Deploy 3bccec5 by [email protected] 
2011-11-21T08:31:17+00:00 heroku[api]: Release v7 created by [email protected] 
2011-11-21T08:31:18+00:00 heroku[web.1]: State changed from crashed to created 
2011-11-21T08:31:18+00:00 heroku[slugc]: Slug compilation finished 
2011-11-21T08:31:20+00:00 heroku[web.1]: Starting process with command `sh script/jruby -S trinidad -p 17687` 
2011-11-21T08:31:20+00:00 app[web.1]: Classpath is: :/app/etc:/.m2/repository/org/jruby/jruby-complete/1.6.3/jruby-complete-1.6.3.jar 
2011-11-21T08:31:20+00:00 app[web.1]: Exception in thread "main" java.lang.NoClassDefFoundError: org/jruby/Main 
2011-11-21T08:31:20+00:00 app[web.1]: Caused by: java.lang.ClassNotFoundException: org.jruby.Main 
2011-11-21T08:31:20+00:00 app[web.1]: at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
2011-11-21T08:31:20+00:00 app[web.1]: at java.security.AccessController.doPrivileged(Native Method) 
2011-11-21T08:31:20+00:00 app[web.1]: at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
2011-11-21T08:31:20+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
2011-11-21T08:31:20+00:00 app[web.1]: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
2011-11-21T08:31:20+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
2011-11-21T08:31:20+00:00 app[web.1]: Could not find the main class: org.jruby.Main. Program will exit. 
2011-11-21T08:31:20+00:00 heroku[web.1]: Process exited 
2011-11-21T08:31:21+00:00 heroku[web.1]: State changed from starting to crashed 
+0

Điều đó nói rằng nó không thể tìm thấy thư viện JRuby. Bạn đã bao gồm nó trong gói của bạn chưa? Gói này có chạy cục bộ không? –

Trả lời

2

Bạn có dòng này:

Classpath is: :/app/etc:/.m2/repository/org/jruby/jruby-complete/1.6.3/jruby-complete-1.6.3.jar 

Đường nối bạn có tham chiếu đến kho lưu trữ miền địa phương của bạn ở đâu đó và Heroku corse không có nó. đây ?

Kiểm tra tất cả các ref và xem các tùy chọn đóng gói có thể là một khởi đầu tốt ...

+0

@justingordon, nỗ lực của bạn có thực sự thành công sau khi bạn đã thử câu trả lời này không? Nó sẽ là tốt để biết về sự tiến bộ của bạn :) –

+0

heroku bây giờ hỗ trợ JRuby trực tiếp ... – justingordon

0

hacks trước để nhận JRuby và runtimes khác không được hỗ trợ trên Heroku bây giờ lỗi thời với sự sẵn có của buildpacks của bên thứ ba:

https://devcenter.heroku.com/articles/buildpacks https://github.com/jruby/heroku-buildpack-jruby

4

Tính đến Bundler 1.2 bây giờ bạn có thể specify the Ruby implementation and version trong Gemfile của bạn. Điều tuyệt vời về điều này là Heroku sẽ hiểu những cài đặt này và chuẩn bị ứng dụng Heroku cho môi trường của bạn.

Đi này Gemfile ví dụ:

source "https://rubygems.org" 

ruby "1.9.3" 

gem "rails" 
gem "puma" 

gì mát mẻ về việc này là theo mặc định Celadon Cedar sử dụng của Ruby 1.9.2. Tuy nhiên, khi bạn chỉ định ruby "1.9.3" trong Gemfile nó sẽ thực sự biên dịch Ruby 1.9.3 cho môi trường Heroku của bạn.

Bây giờ, nếu bạn muốn thêm một thực hiện của Ruby khác nhau để môi trường Heroku, bạn có thể làm như vậy như thế này:

source "https://rubygems.org" 

ruby "1.9.3", :engine => "jruby", :engine_version => "1.7.0.preview1" 

gem "rails" 
gem "puma" 

Bây giờ nó sẽ cài đặt và sử dụng JRuby 1.7.0.preview1 trong Ruby 1.9 cho ứng dụng Heroku của bạn khi triển khai. Nó cũng sẽ định nghĩa các tùy chọn JVM thích hợp trong các biến môi trường Heroku.

Điều tốt nhất là điều này đi kèm với Heroku buildpack chính thức, vì vậy không cần phải chuyển sang gói buildpack của bên thứ ba để nhận JRuby/JVM đang chạy trên Heroku. Mặc dù tôi chưa nhận được nó để làm việc, điều này should also work with Rubinius, nhưng tôi tin rằng nó hiện đang bị lỗi. Hoặc là, hoặc tôi đang làm sai.

Đây là ý kiến ​​của tôi về tính năng tuyệt vời và khả năng mở rộng. Chỉ cần định nghĩa Ruby implementation/version/mode bạn đang sử dụng trong Gemfile cùng với các phụ thuộc khác và Heroku sẽ đảm bảo môi trường được chuẩn bị.

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