para - instalar ruby on rails en windows 10
¿Cómo precompila las extensiones nativas de una gema de rubí para Linux? (2)
Tenemos una aplicación de ruby que depende de una gema con extensiones nativas (en este caso específico, Nokogiri). Sin embargo, por diversas razones no podemos instalar los requisitos previos de compilación (como build-essential, libxslt-dev, ruby-dev, etc.) para esa gema en nuestro host de producción.
¿Hay alguna manera (estándar?) De volver a empaquetar la gema con las extensiones nativas preconstruidas?
Debería ser posible (parece ser bastante estándar hacer esto para Windows), pero no puedo encontrar ninguna documentación sobre el tema.
Tenga en cuenta que solo necesitamos admitir una única plataforma, con versiones conocidas de todas las bibliotecas del sistema (Ubuntu 9.04 Server 64 bit, Ruby 1.8.7).
ACTUALIZACIÓN: estamos utilizando Bundler, por lo que queremos tener todavía una joya para instalar al final del día, no un paquete de Debian .
Finalmente encontré una forma de hacer esto para las gemas que usan compilador de compilación para construir sus extensiones C (que es la mayoría de ellas).
Debe hacer lo siguiente en una máquina que sea idéntica a la que desea implementar, o simplemente no funcionará:
Instale los requisitos previos de compilación para crear extensiones C:
# apt-get install build-essentials ruby-dev # ... etc
# gem install rake-compiler
Desempaque la gema que quiere reconstruir:
$ gem unpack nokogiri
Construye tu nueva joya precompilada brillante:
$ rake native gem
Ahora puede instalar la gema nativa en una máquina sin herramientas de compilación instaladas:
$ gem install pkg/nokogiri-1.4.3.1-x86-linux.gem
Successfully installed nokogiri-1.4.3.1-x86-linux
1 gem installed
Construir la máquina
Para tener la versión correctamente configurada para todas sus gemas ya almacenadas en caché, empaquete todas las gemas en el vendor/cache
en una máquina idéntica:
$ bundle package --all
Máquina de Prduction
Instala todas las dependencias de gemas ya almacenadas en caché que requieren tener la versión de plataforma correcta usando la memoria caché de gemas:
$ bundle install --local --deployment