2009-08-12 12 views
10

Rieles, en modo de desarrollo es LENTO. Muy, muy lento Ejecuto Vista y configuré config.cache_classes = true en development.rb ... Pero aún es lento y tengo que reiniciar el servidor después de cambiar mi código.¿Qué puedo hacer para acelerar el modo de desarrollo de Rails?

Mi compañero de trabajo desarrolla Rails en una Mac y observa una lentitud similar.

Mi tiempo de desarrollo se ralentiza de manera significativa porque lleva unos minutos probar los cambios de código.

¿Es esto tan bueno como se consigue el desarrollo de Rails? ¿O me estoy perdiendo algo que lo hará rápido y mi vida feliz?

+2

Parece que solo estás descargando vapor aquí golpeando los rieles. No soy usuario de rieles, pero tampoco veo que se haga una pregunta real significativa aquí. ¿Estás preguntando sobre problemas de escalabilidad con Rails? ¿Estás preguntando sobre las posibles soluciones a esta lentitud que estás experimentando? –

+3

No estoy criticando a Rails. Me encanta usar Rails por muchas razones, la velocidad del servidor del modo de desarrollo no es una de ellas. No es un problema de escalabilidad, es un problema de velocidad de desarrollo. En términos de facilidad de codificación, Rails me ha ahorrado muchísimo tiempo. Me gustaría ahorrar aún más con un servidor de desarrollo más rápido. – user94154

+1

¿Se ejecuta rápidamente en producción? – klochner

Respuesta

-13
Andrews-MacBook-Pro:Sites askegg$ rails test 
Andrews-MacBook-Pro:Sites askegg$ cd test 
Andrews-MacBook-Pro:test askegg$ ./script/generate model test 
     exists app/models/ 
     exists test/unit/ 
     exists test/fixtures/ 
     create app/models/test.rb 
     create test/unit/test_test.rb 
     create test/fixtures/tests.yml 
     create db/migrate 
     create db/migrate/20090812005217_create_tests.rb 
Andrews-MacBook-Pro:test askegg$ ./script/performance/benchmarker 1000000 Test.new 
      user  system  total  real 
#1  25.140000 0.200000 25.340000 (25.549605) 

Hmmm. 25 segundos para instanciar 1 millón de objetos en modo de desarrollo en un macbook pro con otros 12 programas cargados. Me parece bien.

+3

¿Así que está diciendo que debería apreciar la enorme complejidad tras bastidores de la aplicación de Rails para proporcionarme una experiencia de desarrollo sin problemas y contar el tiempo del servidor de desarrollo lento como un pequeño inconveniente de una muy buena compensación? – user94154

+3

No, en absoluto. Estoy demostrando que Rails (al menos en mi máquina) no es lento en absoluto. Acabo de ejecutar otra prueba (en modo de desarrollo) en un proyecto que completé recientemente: carga 1,000 objetos en 0.271 segundos. Esto está muy lejos de los tiempos de carga de 8 segundos. Algo está mal con su configuración, por lo que realmente no es un problema específico de Rails. – askegg

+0

Ah, además, prueba perfilando las llamadas de método que estás realizando para ver dónde se puede ralentizar la aplicación. por ejemplo, "./script/performance/profiler Page.first 1000" – askegg

0

Supongo que sus solicitudes están tomando segundos? (De lo contrario, probablemente no te habrías dado cuenta). Siempre ha sido rápido para mí. Especialmente desde que comencé a usar sinatra en lugar de rieles: D

Ah, y olvidé mencionar - solía ejecutar rails a nivel local, pero actualmente uso un servidor virtual centos con VMWare. Ambos fueron rápidos

+0

har har har. Bueno, no debería tener que explicarlo, pero Sinatra no es una opción. Ya estoy metido en mi proyecto actual. ¿Es divertido instalar un complemento que le permita ejecutar (gasp) el código actualizado sin reiniciar el servidor de desarrollo? oh snap :) – user94154

+0

cuéntame más sobre este servidor de centos virtuales ... – user94154

+0

Creo que VMWare hace una versión de Windows, pero básicamente, compras/descargas un programa que te permite ejecutar varios sistemas operativos de forma virtual. Por ejemplo, en mi Mac, tengo Windows y Centos (Linux) ejecutándose en una máquina virtual. El software le permite compartir carpetas para que una carpeta en su máquina sea espejo en el sistema operativo virtual. Lo configura como un servidor, y tiene una dirección IP local. Puede escribir esa dirección IP para presionarla, o editar su archivo de hosts para crear un dominio falso. Por ejemplo, http: //blog.local va a mi servidor virtual. –

0

Configuré config.cache_classes = true en development.rb. Todavía es lento y tengo que reiniciar el servidor después de cambiar mi código.

No debe usar esa memoria caché en desarrollo (especialmente si todavía es lenta al usarla). Tener que reiniciar el servidor todo el tiempo lo ralentizará aún más.

¿Estás seguro de que el propio Ruby es lento? ¿No es cierto, por ejemplo, algún código de acceso DB que ejecute? ¿Es una demo simple "Hello World" igualmente lenta?

¿Y qué tan lento estamos hablando? ¿Tiempos de carga de la página más de 10 segundos?

+0

los tiempos de carga son aproximadamente 8 segundos. El acceso a la base de datos no es lento, ya que tengo un servidor de producción de pruebas (no local) que está conectado a la misma base de datos. para su primer punto, es esencialmente una elección entre el menor de dos males. – user94154

7

¿Estás hablando de:

  • Lentitud de iniciar la aplicación (como el funcionamiento de la escritura/servidor)?

    Si es el inicio del servidor, ¿qué servidor está utilizando? Desde mi experiencia, webrick es más lento que mestizo es más lento que delgado. El pasajero realmente es el más eficiente para el desarrollo local (aunque nunca he intentado hacerlo funcionar en Windows).


  • respuestas de páginas lentas de golpear el servidor dev?

    Esto podría ser consultas ineficaces de la base de datos, demasiados cálculos en la vista que podrían volverse a trabajar, etc. Si se está ejecutando correctamente en la producción, probablemente este no sea su problema. Sin embargo, el servidor web que ejecute también marcará una diferencia en su velocidad localmente. Creo que el mismo orden de inicio también se aplica para la ejecución.


  • tareas Rake tarda mucho en empezar?

    Tuve este problema también. Si tiene un proyecto grande con muchos complementos (lo que significa una gran cantidad de inicialización que debe ejecutarse), puede llevar un tiempo aumentar el entorno de los rieles. Hay cosas que probablemente lo aceleren, pero no hay una solución mágica. Asegúrese de que usted no tiene ningún tipo de plugins instalados que ya no utilice, tome una mirada cuidadosa a su entorno y inicializadores para asegurarse de que está en buena forma, etc.


ser pocas palabras, indicando "Rails es lento en desarrollo" realmente no identifica el problema. Si puede aclarar qué es lento, entonces puede obtener ayuda específica para acelerarlo. He trabajado en muchos proyectos bastante grandes que han sufrido problemas de rendimiento tanto en el desarrollo como en la producción. Nunca he tenido una situación que no se pueda mejorar si se le presta la atención adecuada. Identifique el problema y generalmente puede diagnosticar una mejor solución para acelerar las cosas.

26

El complemento rails-dev-boost acelera el modo de desarrollo de Rails. Estaba teniendo el mismo problema, y ​​este complemento hizo que mi aplicación fuera muy ágil (en comparación con algunos segundos de carga por página). ¡Funcionará a una velocidad similar a la producción!

http://github.com/thedarkone/rails-dev-boost

para instalarlo:

script/plugin install git://github.com/thedarkone/rails-dev-boost 
+0

Acabo de probar este complemento y me ayudó mucho. ¡Increíble, gracias! –

+0

¡Esta joya es increíble! Estaba demasiado frustrado con el env del desarrollador que era más lento con la aplicación cada vez más grande y más grande. Esto es como un Dios enviado. – Autodidact

+0

parecía ayudar mucho en mi máquina de desarrollo mac también - esta debería ser la respuesta aceptada – jpwynn

2

He estado corriendo en los mismos temas. Mi aplicación, en modo dev, se vuelve cada vez más lenta. Como un ejemplo, se crea un nuevo controlador con una nueva acción:

def test 
    render :text => 'nothing' 
    end 

En el modo dev, esto tarda entre 12-15 segundos para completar (cuando se solicita a través de FF y IE). Estoy usando mongrel (no agrupado). Estoy en un macbook pro.

En modo prod esto toma ~ 130ms.

Tiene que haber una manera de averiguar qué archivos se están cargando por solicitud (perfiles básicos) para que pueda tratar de averiguar qué está pasando y dónde está el cuello de botella.

FF Firebug Net muestra que la mayor parte del tiempo (11-14 segundos) se gasta en estado de ESPERA.

consola muestra:

Completed in 2ms (View: 0, DB: 152) 

.

¿Alguna idea?

+0

También estoy teniendo este mismo problema. En dev env, la recarga del navegador toma alrededor de 15-20 segundos, pero en la consola solo muestra ~ 400ms. Esto se está convirtiendo en un gran dolor en el culo. Y todavía no he encontrado la solución. – Autodidact

+0

Tengo exactamente la misma experiencia. Fue rápido anoche, se despertó esta mañana y ahora es lento. Ejecutar 'dscacheutil -flushcache' tampoco ayudó. –

1

Llegué a esta publicación tratando de entender por qué estaba viendo tanto tiempo entre las solicitudes en el modo de desarrollo.

Estoy trabajando en una aplicación de tamaño modesto - 4000 LOC, 113 clases - y viviendo en una máquina lenta. Más de 9/10ths del tiempo entre solicitudes ocurre mientras se carga el código del modelo.

Previsiblemente, config.cache_classes = true acelera considerablemente las cosas.

+0

Sí, eso se acelera enormemente, pero el inconveniente es que cada vez que cambio un archivo específico, este cambio no se recoge debido a que el indicador en caché es verdadero. Por lo tanto, tengo que reiniciar la aplicación cada vez y el reinicio del servidor lleva de 20 a 30 segundos de nuevo. – Autodidact

0

Establecer config.cache_classes = true en development.rb siempre acelerará aplicaciones más grandes en modo dev. Me gustaría tener esta línea en mi entorno de desarrollo:

config.cache_classes = ENV["CACHE_CLASSES"] ? ENV["CACHE_CLASSES"] == "true" : false 

, entonces puede comenzar con su servidor:

CACHE_CLASSES=true script/server 

cuando se desea un tiempo de respuesta más rápido y no les importa que las clases no lo hacen volver a cargar en cada solicitud.

0

Si está utilizando las versiones 3.0 o 3.1 de Rails, puede usar active reload para acelerar los tiempos de carga de la página de forma condsiderably. Fue rodado en Rails 3.2.

1

El best way para hacer un desarrollo más rápido es la instalación de gem llamado active_reload.

Para instalar este gem, puede introducir comandos,

gem install active_reload

Y, en su Gemfile proyecto rieles, añadir

gem 'active_reload'

A continuación, reinicie el servidor y encontrará modo de desarrollo mucho más rápido de lo que solía ser.

Cuestiones relacionadas