2010-08-31 12 views
45

Rails 3.0.0, 2.2.15 Pasajeros:Rails 3: Pasajero no puede encontrar gemas git instalados por bundler

  • crear un nuevo rieles proyectan
  • Añadir gem 'paperclip', :git => 'git://github.com/lmumar/paperclip.git', :branch => 'rails3' a su Gemfile
  • Do bundle install
  • Todo en orden, empezando por rails/script server & que accede también trabaja
  • Sin embargo, cuando se accede a los pasajeros, que dice:

git: //github.com/lmumar/paperclip.git (at rails3) no está desprotegido. Por favor, ejecute bundle install (Bündler :: GitError)

He tratado bundler pack (no ayuda) y el establecimiento de BUNDER_HOME a ~/.bundler (GIT Paperclip se instala allí por bundler install) en el .htaccess y diversos lugares de config /*.rb, pero esto tampoco fue exitoso.

~/.bundler es propiedad del mismo usuario que el proyecto Rails (el pasajero se ejecuta con este usuario), por lo que no puede ser un problema de permiso. sudo está instalado y llamado por bundle install.

¿Alguna pista?

+0

¿No es este un mejor candidato para 'serverfault' ya que se trata de configurar' 'nginx' o' apache'? – alternative

+0

No entiendo. Tengo problemas con Passenger, usando Apache. – junique

+1

'bundle pack' resolver mi problema. http://stackoverflow.com/questions/2494399/deploying-rails3-apps-with-bundler-and-phusion-passenger-bundle-dir-not-found – zires

Respuesta

22

solución (me tomó un par de horas):

Mare seguro de que RAILS_ROOT/.bundle/config (SetEnv etc no funcionó para mí) contiene:

--- 
BUNDLE_PATH: /home/xxxxx/.bundler 

Nota BUNDLE_PATH, no BUNDLER_PATH! También había una entrada DISABLED_SHARED_GEMS = 1, la eliminé.

Luego, el paquete reconoce la ruta correcta incluso cuando se carga desde el Pasajero. Sin pasajeros, que siempre trabajó (y utiliza /home/xxxxx/.bundler, como se dice en la pregunta)

+0

¡Salvó mi día! Gracias por compartir. –

+0

¡Y el mío! Muchas gracias. Dejé DISABLED_SHARED_GEMS = 1 en su lugar por cierto. – artemave

+1

No tenía un directorio .bundler en mi casa antes de agregar la opción de configuración a .bundle/config y luego volver a ejecutar 'bundle install'. Después de hacer eso, tuve el directorio y el pasajero pudo encontrar las gemas empaquetadas. – davemyron

68

Im solía tener este problema, resolver usando

bundle --deployment 

que instalarán las joyas de proveedor/paquete

+4

+1 Esto también funciona, y es mucho más simple. – GarlicFries

+1

Esto funciona perfectamente, gracias. Los documentos dicen que [no debería usarse para el desarrollo] (http://gembundler.com/bundle_install.html), por lo que en una máquina de desarrollo usaría 'bundle install --path vendor/bundle' en su lugar. –

+4

No quiero mis gemas en mi repositorio de git. –

8

Puede usar bundle install --path vendor/bundle para instalar gemas localmente, en lugar de gems del sistema.

Si desea seguir usando gemas del sistema, sin embargo, es sólo una línea en la configuración de Apache para contar pasajeros dónde encontrar las gemas del sistema:

SetEnv GEM_HOME /Users/bob/.bundle 

Hay una valoración crítica poco más elaborado en mi blog en Using Passenger with GEM_HOME set

+0

ven doring my gems no funcionó para mí usando passenger/nginx :( – Macario

+1

No quiero mis gemas en mi repositorio de git. –

4

Me encontré con este problema mientras escribía una aplicación Sinatra. Para resolverlo agregué esta línea a config.ru.

require 'bundler/setup' 
+1

Ahhh no funciona. Phusion no puede encontrar la gema del paquete :( – tekknolagi

0

Tuve el mismo problema y fue debido a un problema de derechos con RVM.

El usuario que ejecuta el servidor web no puede verificar si la gema GIT está disponible. Como "Pasajero" que utiliza el usuario web para ejecutar, no puede hacer esta comprobación.

La solución que encontré fue la de añadir usuario de la web al grupo RVM:

usermod -a -G rvm apache 

espero que esto ayudará a algunas otras personas que no quieren tener GEM desplegado en "vendedor/bundle".

Cuestiones relacionadas