2012-03-18 32 views
76

Quiero ejecutar un archivo Ruby en el contexto de un entorno de Rails. rails runner casi hace lo que quiero hacer, pero me gustaría simplemente darle el nombre y los argumentos del archivo. Estoy bastante seguro de que esto es posible ya que lo he hecho antes. ¿Alguien me puede recordar cómo hacer esto?¿Cómo ejecuto un archivo Ruby en un entorno de Rails?

Respuesta

28

Simplemente requiera environment.rb en su secuencia de comandos. Si el script se encuentra en el directorio script de su aplicación Rails hacer

require File.expand_path('../../config/environment', __FILE__) 

Se puede controlar el entorno utilizado (desarrollo/prueba/producción) estableciendo la variable de entorno RAILS_ENV cuando se ejecuta la secuencia de comandos.

RAILS_ENV=production ruby script/test.rb 
+0

Si ejecuto el código anterior, se mostrará "home/apps/config/environment". ¿Qué ocurre si tengo una aplicación de 2 carriles ejecutándose en el mismo directorio? ¿Qué entorno tomará? Estoy enfrentando este problema en mi caja local. gentilmente sugiera –

+0

@VijaySali Supongo que está ejecutando su script desde el directorio 'app/script'. El archivo de entorno se tomará de la aplicación individual. – iltempo

+0

yup me funcionó, agregué ENV ['RAILS_ENV'] también –

18

Runner ejecuta código Ruby en el contexto de los carriles no interactiva.

De rails runner comando:

Usage: runner [options] ('Some.ruby(code)' or a filename) 

    -e, --environment=name   Specifies the environment for the runner to operate under (test/development/production). 
            Default: development 

    -h, --help      Show this help message. 

También puede utilizar corredor como una línea tinglado para las secuencias de comandos de esta manera:

------------------------------------------------------------- 
#!/usr/bin/env /Users/me/rails_project/script/rails runner 

Product.all.each { |p| p.price *= 2 ; p.save! } 
------------------------------------------------------------- 
+0

¿Por qué solo funciona cuando especifico "/ Users/me/rails_project/script/rails" en su totalidad y no solo "rails"? TIA – iphone007

+0

¿Sus otros comandos de rieles también requieren una lista de la ruta completa? (es decir, servidor de rieles) – colsen

3

Ésta es una cuestión de edad, pero en mi opinión que a menudo se encuentran es útil crear una tarea de rake ... y en realidad es muy fácil.

En lib/tasks/example.rake:

namespace :example do 

desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal" 
task create_user: :environment do 
    User.create! first_name: "Foo", last_name: "Bar" 
end 

Y luego en el terminal ejecutar:

rake example:create_user 

localmente este se ejecutará en el contexto de su base de datos de desarrollo, y si se ejecuta en Heroku que se ejecutará mientras está conectado a su base de datos de producción. Encuentro esto especialmente útil para ayudar con migraciones o tablas modificadas.

Cuestiones relacionadas