Coder Social home page Coder Social logo

rubyomr-preview's Introduction

Introducing the "Ruby + OMR Technology Preview"

This technology preview showcases how the Eclipse OMR project can be integrated into the Ruby VM. To do this work, we have now created Ruby + OMR as a Ruby fork. Our intention is to use this fork to contribute Ruby + OMR code changes back into Ruby.

Our current Ruby + OMR changes are based on Ruby 2.2 and located in the ruby_2_2_omr branch. You can build everything from source, or, use the docker images below.

Going forward, we will be working in this fork to update to the master branch with the goal of submitting a pull request against Ruby. We are open to feedback at any point on how best to structure the changes we've made or on how to best propose these changes into Ruby.

Because we have used some components in the Ruby + OMR Technology Preview that have not yet been open sourced via the Eclipse OMR project (for example, the Ruby JIT), we cannot yet include souce code changes for these components. But you can continue to try them out via our docker images in this project, and we welcome your feedback!

Our sincerest hope is that this preview helps us to work with the existing Ruby community to integrate those parts of Eclipse OMR that the Ruby community finds beneficial.

Our lawyers are keen to tell you that any reference to the Invoice in the License means that you are authorised to use one copy of the downloaded image.

If you can't wait to get started, you can go directly to the Quick Start Guide

Otherwise, you may be wondering…

What is “OMR” ?

The Eclipse OMR project is an open source community growing around reusable and easily consumable core components (like thread library, platform abstraction library, garbage collector, etc.) for building all kinds of language runtimes, from Java to Ruby to Smalltalk and beyond. Many of the components were contributed by IBM from the IBM J9 Java Virtual Machine (JVM), an enterprise class JVM implementation representing hundreds of person years of development creating scalable, high performance runtime technology. But going forward, this open project is accepting contributions from anyone.

The OMR components have 3 features that distinguish the Eclipse OMR project from other projects that aim to reuse technology for building language runtimes: 1) OMR has no language semantics, 2) OMR is not a language runtime, and 3) OMR components can be consumed by any language runtime. The first two features distinguish OMR from efforts to implement languages on top of a mature language runtime like the Java Virtual Machine (by implementing in Java) or the CoreCLR project (by implementing via CLR bytecodes). Both these other efforts require mapping a language's semantics into the semantics of another language (either Java or CLR). In contrast, OMR components can be brought into an existing language runtime with its own bytecode set and bytecode semantics (or abstract syntax tree semantics). OMR can therefore be used to build any kind of language runtime, free from the influence of Java or another language's semantics.

One of the most important motivators for the Eclipse OMR project is the increasing importance of cloud computing platforms, where the polyglot of programming languages must all cooperate seamlessly in what can really be a diverse environment. Language runtimes must be monitored and managed adaptively to adjust to the current operating conditions in the cloud platform. But not all runtimes have the same kinds of responsiveness built in because most language runtimes today actually share very little technology. can hurt or even sabotage longer term success. But every language runtime community needs to go through this process, and as existing runtimes become more and more sophisticated, the path to success for new languages becomes even more difficult.

By introducing shareable core technology components for building all kinds of language runtimes, the Eclipse OMR project hopes to both make the process easier for new languages to bootstrap themselves as well as to provide mechanisms for existing runtimes to fill gaps or to reduce maintenance costs so that communities can focus more of their efforts on the opportunities and problems that are specific to their language.

To learn more about the Eclipse OMR project, please visit us at the Eclipse OMR Github page.

So what’s in this Ruby + OMR preview?

To make sure the Eclipse OMR technology really could work in runtimes other than Java, the OMR team has been working to create several proof points to use the technology with different language runtimes (like Ruby!). This technology preview release represents the current state of our Ruby proof point, with new GC, JIT compiler, and method profiling capabilities. It's not a toy: we've got it running Rails applications. We cannot claim it is ready for use in production, but we think it's good enough to be able to meet the goals outlined at the beginning of this document.

We presented talks about our Ruby + OMR proof point at Ruby Kaigi 2015:

Building Ruby + OMR

The Eclipse OMR project strives to make it very easy to integrate components into a language runtime.

The Ruby VM needed the following high level sets of changes to incorporate the OMR technology:

  1. configure.in changed to add OMRDIR and OMRGLUE options which default to assume omr in ruby's top directory
  2. makefile.in changed to configure, build, and clean up OMR and OMR Ruby Glue under appropriate targets
  3. makefile.in changed to build and link against OMR and Ruby glue objects and static libraries
  4. various changes to files to invoke the methods in the Ruby glue and OMR project as appropriate

Once these changes were made, the Ruby + OMR Technology Preview release can be built via:

$ git clone https://github.com/rubyomr-preview/ruby.git --branch ruby_2_2_omr --recursive 
$ cd ruby
$ autoconf
$ ./configure SPEC=<specname> --with-omr-jit
$ make
$ make install

Since the Ruby + OMR code has only been tested on Linux x86-64, Linux PPC-LE-64, Linux PPC-BE-64 and Linux 390-64 the acceptable values for <specname> are:

1. linux_x86-64
2. linux_ppc-64_le_gcc
3. linux_ppc-64
4. linux_390-64

Building with this simple sequence of commands will download the latest version of the Ruby + OMR Technology Preview and Eclipse OMR, build them together and install them onto your system. That's it!

There are more configuration options than the simple set listed above, which is just a high level description. Search for "OMR" and hopefully you'll find the tags we used self explanatory. If not, feel free to ask questions!

To make it even easier for people to try out the Ruby + OMR Technology Preview without having to clone repositories or build, we also have three docker images available that come with the Ruby + OMR Technology Preview already built and pre-installed. Docker images make it easy to avoid fussing with platform specifics. The images have a preinstalled Ruby 2.2.x with built-in OMR technology. Also included is a monitoring agent which can be used with IBM Health Centre to visualize Ruby method profiles and garbage collection performance while your Ruby application is running.

The OMR technology itself is included only as part of the prebuilt binaries which you can access by simply running ruby (/usr/local/bin/ruby). Unfortunately, not all of the OMR project is available in the open (we're working on it really hard). The real place to look for the most up to date source code is at The Ruby + Eclipse OMR Ruby repo.

Not all of the OMR technologies are active by default in this version of Ruby. Environment variables activate those technologies that are not on by default, like the method profiling support when you connect to ruby with IBM Health Center (also included in the docker image: see the User's Guide!) or to turn the JIT compiler on. For example, to activate the JIT compiler technology, you'll need to set OMR_JIT_OPTIONS="-Xjit" which turns on the JIT where it will compile methods that are invoked more than 1000 times. OMR_JIT_OPTIONS="-Xjit:count=N" adjusts the invocation count before JIT compilation so that you can play around a bit.

For full details on how to activate each OMR component and the various configuration options available in this technology preview, please see the User's Guide in the Wiki !

Quick Start Guide

The following files are in this project:

  • This README.md file
  • A LICENSE directory describing in excruciating detail just how little you can rely on in this technology preview

You can also find the User's Guide in our wiki.

To start using the Ruby + OMR Technology Preview, please follow the directions for the platform you're using: Linux on X86, Linux on Z, or Linux on OpenPOWER. The Linux X86 Docker image has been updated to the latest version and we will be updating the Linux on Z and Linux on OpenPOWER soon.

Linux on X86, 64-bit

  1. If you do not already have docker installed, follow these directions to get started:

    Installing Docker For Linux on x86

  2. Download the rubyomrpreview docker image from Box.com with the command:

     $ wget https://ibm.box.com/shared/static/sy7pgu7pqbyht9j3g3tvko77ska1k8x1.tgz -O rubyomrpreview-x86_64.tgz
    
  3. Load the docker image locally:

     $ docker load -i rubyomrpreview-x86_64.tgz
    
  4. Run the docker image (you can omit the -p 1883:1883 if you won't be using Health Centre or if you won't be running the message broker--see the User's Guide-- inside the container):

     $ docker run -p 1883:1883 -it rubyomrpreview/rubyomrpreview /bin/bash
    
  5. Verify you can successfully run Ruby + OMR Technology Preview:

     root@d2ae8cf89313:/# ruby --version
     ruby 2.2.5p285 (Eclipse OMR Preview r1) (2016-03-29) [x86_64-linux]
    
  6. Play to your heart's content!

Linux on Z, 64-bit

  1. If you do not already have docker installed, follow these directions to get started:

    Installing Docker For Linux on Z

  2. Download the rubyomrpreview docker image from Box.com with the command:

     $ wget https://ibm.box.com/shared/static/1bzikt7fmfdejpvp4zqglnss64tcwls2.tgz -O rubyomrpreview-s390x.tgz
    
  3. Load the docker image locally:

     $ docker load -i rubyomrpreview-s390x.tgz
    
  4. Run the docker image (you can omit the -p 1883:1883 if you won't be using Health Centre or if you won't be running the message broker--see the User's Guide-- inside the container):

     $ docker run -p 1883:1883 -it rubyomrpreview/rubyomrpreview /bin/bash
    
  5. Verify you can successfully run Ruby + OMR Technology Preview:

     bash-4.2# ruby --version
     ruby 2.2.3p97 (OMR Preview r1)(2015-04-14) [s390x-linux]
    
  6. Play to your heart's content!

Linux on OpenPOWER, 64-bit

Installing Docker for Linux on OpenPOWER

  1. Download the rubyomrpreview docker image from Box.com with the command:

     $ wget https://ibm.box.com/shared/static/hdqgfvvnnq1idf6qvlsv9r0rw5dzwbhc.tgz -O rubyomrpreview-powerpc64le.tgz
    
  2. Load the docker image locally:

     $ docker load -i rubyomrpreview-powerpc64le.tgz
    
  3. Run the docker image (you can omit the -p 1883:1883 if you won't be using Health Centre or if you won't be running the message broker--see the User's Guide-- inside the container):

     $ docker run -p 1883:1883 -it rubyomrpreview/rubyomrpreview /bin/bash
    
  4. Verify you can successfully run Ruby + OMR Technology Preview:

     root@7305793b79e9:/# ruby --version
     ruby 2.2.3p97 (OMR Preview r1) (2015-04-14) [powerpc64le-linux]
    
  5. Play to your heart's content!

To see how to use the various OMR technologies, please look for Tracing, Garbage Collector, and Just In Time (JIT) compiler sections in the User’s Guide in the Wiki !

We would love to hear your feedback!

As we said above, we’re making this technology preview openly available so that everyone can try it out and let us know what's good and what's not so good. We welcome all feedback!

We’re excited to finally get into the open with this project, and look forward to hearing what you think!

We’re going to use the issue tracking associated with the rubyomr-preview github project to track the feedback, so if you’d like to tell or ask us anything, please open an issue

rubyomr-preview's People

Contributors

alin00 avatar ch4s3 avatar charliegracie avatar hsbt avatar lauraalkhoury avatar mgaudet avatar mstoodle avatar rservant avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rubyomr-preview's Issues

configure: error: cannot run /bin/bash tool/config.sub on ubuntu:trusty

Just bumped into the following error trying to compile in an ubuntu:trusty docker container augmented with build-essential, git, autoconf packages.

root@c0912d5b9276:/tmp/ruby# cat /etc/issue
Ubuntu 14.04.5 LTS \n \l

Here's the failure:

root@c0912d5b9276:/tmp# git clone https://github.com/rubyomr-preview/ruby.git --branch ruby_2_2_omr --recursive
Cloning into 'ruby'...
remote: Counting objects: 345010, done.
remote: Total 345010 (delta 0), reused 0 (delta 0), pack-reused 345010
Receiving objects: 100% (345010/345010), 151.57 MiB | 12.75 MiB/s, done.
Resolving deltas: 100% (268053/268053), done.
Checking connectivity... done.
Submodule 'omr' (https://github.com/eclipse/omr.git) registered for path 'omr'
Submodule 'rbjitglue' (https://github.com/rubyomr-preview/rbjitglue.git) registered for path 'rbjitglue'
Cloning into 'omr'...
remote: Counting objects: 8788, done.
remote: Total 8788 (delta 0), reused 0 (delta 0), pack-reused 8787
Receiving objects: 100% (8788/8788), 10.52 MiB | 9.95 MiB/s, done.
Resolving deltas: 100% (5572/5572), done.
Checking connectivity... done.
Submodule path 'omr': checked out 'a71af9eee90ae25e20ffeb7cd15ff17c603b7e9c'
Cloning into 'rbjitglue'...
remote: Counting objects: 307, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 307 (delta 1), reused 0 (delta 0), pack-reused 303
Receiving objects: 100% (307/307), 171.66 KiB | 0 bytes/s, done.
Resolving deltas: 100% (166/166), done.
Checking connectivity... done.
Submodule path 'rbjitglue': checked out '014b11af99e104e493195a01bac933afa8722cbd'
root@c0912d5b9276:/tmp# cd ruby
root@c0912d5b9276:/tmp/ruby# autoconf
root@c0912d5b9276:/tmp/ruby# ./configure SPEC=linux_x86-64 --with-omr-jit
configure: error: cannot run /bin/bash tool/config.sub

There is a config.sub around but it's located in ./omr/config.sub.

News

Any news on what's happening with OMR?

cannot compile

getting the following errors

g++  -I. -I../include -I../stats -I../structs -Istandard -Isegregated -I/home/roma/local_projects/rubyomr/./omrglue -I/home/roma/local_projects/rubyomr -I/home/roma/local_projects/rubyomr/.ext/
include/x86_64-linux -I/home/roma/local_projects/rubyomr/. -I/home/roma/local_projects/rubyomr/./include  -DUT_DIRECT_TRACE_REGISTRATION -I../../include_core -I../../nls -DLINUX -D_REENTRANT -D
_FILE_OFFSET_BITS=64 -DJ9X86 -c  -MMD -MP -fno-exceptions -fno-rtti -fno-threadsafe-statics -fpic -ggdb -m32 -msse2 -I/usr/include/nptl -Wreturn-type -Werror -Wall -Wno-non-virtual-dtor -O3 -fn
o-strict-aliasing -march=pentium4 -mtune=prescott -funroll-loops  -o AddressOrderedListPopulator.o AddressOrderedListPopulator.cpp
In file included from /home/roma/local_projects/rubyomr/gc.h:10:0,
                 from /home/roma/local_projects/rubyomr/./omrglue/ObjectModel.hpp:28,
                 from GCExtensionsBase.hpp:41,
                 from EnvironmentBase.hpp:32,
                 from MemorySubSpace.hpp:27,
                 from HeapRegionDescriptor.hpp:29,
                 from AddressOrderedListPopulator.cpp:20:
/home/roma/local_projects/rubyomr/./include/ruby/ruby.h:117:73: error: size of array ‘ruby_check_sizeof_long’ is negative
 typedef char ruby_check_sizeof_long[SIZEOF_LONG == sizeof(long) ? 1 : -1];
                                                                         ^
/home/roma/local_projects/rubyomr/./include/ruby/ruby.h:121:76: error: size of array ‘ruby_check_sizeof_voidp’ is negative
 typedef char ruby_check_sizeof_voidp[SIZEOF_VOIDP == sizeof(void*) ? 1 : -1];
                                                                            ^
In file included from /home/roma/local_projects/rubyomr/./include/ruby/intern.h:35:0,
                 from /home/roma/local_projects/rubyomr/./include/ruby/ruby.h:1845,
                 from /home/roma/local_projects/rubyomr/gc.h:10,
                 from /home/roma/local_projects/rubyomr/./omrglue/ObjectModel.hpp:28,
                 from GCExtensionsBase.hpp:41,
                 from EnvironmentBase.hpp:32,
                 from MemorySubSpace.hpp:27,
                 from HeapRegionDescriptor.hpp:29,
                 from AddressOrderedListPopulator.cpp:20:
/home/roma/local_projects/rubyomr/./include/ruby/st.h:52:93: error: size of array ‘st_check_for_sizeof_st_index_t’ is negative
 typedef char st_check_for_sizeof_st_index_t[SIZEOF_VOIDP == (int)sizeof(st_index_t) ? 1 : -1];
                                                                                             ^
In file included from /home/roma/local_projects/rubyomr/./include/ruby/ruby.h:24:0,
                 from /home/roma/local_projects/rubyomr/gc.h:10,
                 from /home/roma/local_projects/rubyomr/./omrglue/ObjectModel.hpp:28,
                 from GCExtensionsBase.hpp:41,
                 from EnvironmentBase.hpp:32,
                 from MemorySubSpace.hpp:27,
                 from HeapRegionDescriptor.hpp:29,
                 from AddressOrderedListPopulator.cpp:20:
/home/roma/local_projects/rubyomr/.ext/include/x86_64-linux/ruby/config.h:185:28: error: expected ‘,’ or ‘...’ before ‘__int128’
 #define uint128_t unsigned __int128
                            ^
/home/roma/local_projects/rubyomr/internal.h:254:12: note: in expansion of macro ‘uint128_t’
 nlz_int128(uint128_t x)
            ^
/home/roma/local_projects/rubyomr/internal.h: In function ‘int nlz_int128(unsigned int)’:
/home/roma/local_projects/rubyomr/.ext/include/x86_64-linux/ruby/config.h:185:28: error: expected unqualified-id before ‘__int128’
 #define uint128_t unsigned __int128
                            ^
/home/roma/local_projects/rubyomr/internal.h:256:5: note: in expansion of macro ‘uint128_t’
     uint128_t y;
     ^
In file included from /home/roma/local_projects/rubyomr/method.h:14:0,
                 from /home/roma/local_projects/rubyomr/vm_core.h:37,
                 from /home/roma/local_projects/rubyomr/gc.h:14,
                 from /home/roma/local_projects/rubyomr/./omrglue/ObjectModel.hpp:28,
                 from GCExtensionsBase.hpp:41,
                 from EnvironmentBase.hpp:32,
                 from MemorySubSpace.hpp:27,
                 from HeapRegionDescriptor.hpp:29
from AddressOrderedListPopulator.cpp:20:
/home/roma/local_projects/rubyomr/internal.h:258:5: error: ‘y’ was not declared in this scope
     y = x >> 64; if (y) {n -= 64; x = y;}
     ^
/home/roma/local_projects/rubyomr/internal.h:258:9: error: ‘x’ was not declared in this scope
     y = x >> 64; if (y) {n -= 64; x = y;}
         ^
In file included from /home/roma/local_projects/rubyomr/method.h:14:0,
                 from /home/roma/local_projects/rubyomr/vm_core.h:37,
                 from /home/roma/local_projects/rubyomr/gc.h:14,
                 from /home/roma/local_projects/rubyomr/./omrglue/ObjectModel.hpp:28,
                 from GCExtensionsBase.hpp:41,
                 from EnvironmentBase.hpp:32,
                 from MemorySubSpace.hpp:27,
                 from HeapRegionDescriptor.hpp:29,
                 from AddressOrderedListPopulator.cpp:20:
/home/roma/local_projects/rubyomr/internal.h: In function ‘double rb_float_value_inline(VALUE)’:
/home/roma/local_projects/rubyomr/internal.h:838:24: error: right shift count >= width of type [-Werror]
      VALUE b63 = (v >> 63);
                        ^
/home/roma/local_projects/rubyomr/internal.h: In function ‘VALUE rb_float_new_inline(double)’:
/home/roma/local_projects/rubyomr/internal.h:864:33: error: right shift count >= width of type [-Werror]
     bits = (int)((VALUE)(t.v >> 60) & 0x7);
                                 ^
/home/roma/local_projects/rubyomr/internal.h:876:9: error: large integer implicitly truncated to unsigned type [-Werror=overflow]
  return 0x8000000000000002

Bad performance after enable Jit (compare to stock MRI).

Hi,
Not sure if it's the correct place to post my naive performance tesing result.

My naive testing simply find substring from a big file. (the file is generated by runing git log > log in linux kernel source tree.)

Here is the test script:

require "benchmark"
# copied from https://github.com/kanwei/algorithms
def kmp_search(string, substring)
  return nil if string.nil? or substring.nil?

  # create failure function table
  pos = 2
  cnd = 0
  failure_table = [-1, 0]
  while pos < substring.length
    if substring[pos - 1] == substring[cnd]
      failure_table[pos] = cnd + 1
      pos += 1
      cnd += 1
    elsif cnd > 0
      cnd = failure_table[cnd]
    else
      failure_table[pos] = 0
      pos += 1
    end
  end

  m = i = 0
  while m + i < string.length
    if substring[i] == string[m + i]
      i += 1
      return m if i == substring.length
    else
      m = m + i - failure_table[i]
      i = failure_table[i] if i > 0
    end
  end
  return nil
end

time = Benchmark.measure do
  File.readlines('log').each do |line|
    puts line if kmp_search(line, 'rubysrc')
  end
end
puts time

With stock cruby 2.3.0 it takes 103 seconds.
With OMR version ruby (ruby 2.2.3p97 (OMR Preview r1) (2015-04-14) [x86_64-linux]) it takes 161 second. (I only enable jit by export OMR_JIT_OPTIONS="-Xjit")

Here is output after export OMR_JIT_OPTIONS="-Xjit:verbose":

compiling test.rb:38:block (2 levels) in

  • (cold @ 0x7fde30000034 t=2316545ms 2.710ms) test.rb:38:block (2 levels) in
    compiling test.rb:4:kmp_search
  • (cold @ 0x7fde30000394 t=2323637ms 6.992ms) test.rb:4:kmp_search

Just some feedback...

Sorry to open an issue but I wasn't sure how else I could give you some feedback.

So umm... kinda hard to give feedback, because everything just worked! I ran my app's test suite which is about 1,000 assertions over 500 tests, and everything worked. I also did some benchmarking of a basic page load (one of the most common tasks our app does), and it showed a nice 25% decrease in time to generate! Pretty amazing... 👍

fatal error: numa.h: No such file or directory

I'm getting an error on compile.

make -C port all
make[4]: Entering directory '/home/anthony/Code/ruby/omr/port'
cc  -DOMRPORT_LIBRARY_DEFINE -I. -I./linuxamd64 -I./linux386 -I./linux -I./unix_include -I./unix -I./common -I./include -I./  -DUT_DIRECT_TRACE_REGISTRATION -I../include_core -I../nls -DLINUX -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DJ9HAMMER -c  -MMD -MP -fPIC -ggdb -m64 -Wimplicit -Wreturn-type -Werror -Wall -O3 -fno-strict-aliasing   -o j9nls.o ./common/j9nls.c
In file included from ./omrportpriv.h:29:0,
                 from ./common/j9nls.c:28:
./unix_include/omrportpg.h:41:18: fatal error: numa.h: No such file or directory
 #include <numa.h>
                  ^
compilation terminated.
../omrmakefiles/rules.mk:356: recipe for target 'j9nls.o' failed
make[4]: *** [j9nls.o] Error 1
make[4]: Leaving directory '/home/anthony/Code/ruby/omr/port'
GNUmakefile:253: recipe for target 'port' failed
make[3]: *** [port] Error 2
make[3]: Leaving directory '/home/anthony/Code/ruby/omr'
GNUmakefile:196: recipe for target 'mainbuild' failed
make[2]: *** [mainbuild] Error 2
make[2]: Leaving directory '/home/anthony/Code/ruby/omr'
Makefile:306: recipe for target 'omr' failed
make[1]: *** [omr] Error 2
make[1]: Leaving directory '/home/anthony/Code/ruby'
Makefile:275: recipe for target 'all' failed
make: *** [all] Error 2

This is on Gentoo.

Make an invalid SPEC an error

If SPEC is a required variable, we should also make sure it's correct when provided. Otherwise the Ruby+OMR preview blows up. (see #20)

Our users should have more help, as a typo shouldn't lead to a near undiagnosable build failure.

Missing libmysqlclient-dev

In order to bundle a Rails app which uses mysql gem the package libmysqlclient-dev has to be present.

Can you add this missing package? :)

docker pull command fails

On my Mac the docker pull command in the readme.md file is incorrect. It fails when run.

rservants-mbp:~ rservant$ docker pull rubyomrpreview:rubyomrpreview
Pulling repository docker.io/library/rubyomrpreview
Error: image library/rubyomrpreview:rubyomrpreview not found

The correct command is:
rservants-mbp:~ rservant$ docker pull rubyomrpreview/rubyomrpreview

Replacing the ':' with a '/' fixes the issue.

javascript engine required to run rails

I had to install node.js inside my docker image in order to run a rails hello-world example. Node.js or some other javascript engine should be provided in the docker image to make it easier/quicker to run a rails app.

What about running Java on top of OMR?

Hi,

this all sounds very exciting and interesting! I hope you'll open source the complete OMR soon. Until than I have several questions:

  1. Will it be easily possible to build a complete JDK on top of OMR (e.g. by using the class libraries from the OpenJDK project)?
  2. Which JITs and GCs from IBM J9 will be open sourced in OMR?
  3. Could you please give some more details which exact platforms (i.e. OS/CPU combinations) will be supported by OMR?
  4. What does OMR stand for?

Thanks,
Volker

Error building native extensions on pg gem

I'm not sure if this is an issue with postgres, some dep, or OMR, but when I gem install pg I get:

/usr/local/bin/ruby -r ./siteconf20151217-3183-16ldauy.rb extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/usr/local/bin/$(RUBY_BASE_NAME)
    --with-pg
    --without-pg
    --enable-windows-cross
    --disable-windows-cross
    --with-pg-config
    --without-pg-config
    --with-pg_config
    --without-pg_config
    --with-pg-dir
    --without-pg-dir
    --with-pg-include
    --without-pg-include=${pg-dir}/include
    --with-pg-lib
    --without-pg-lib=${pg-dir}/lib

extconf failed, exit code 1

which pg returns /usr/bin/pg

use rubyorm out of the docker

Hi guys,

Is possible that in the near future we will be able to use rubyomr without the docker?
I would love to install via rvm, rbenv, cruby or make install :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.