tutorial rails español ejemplos comandos caracteristicas ruby yaml

rails - ruby tutorial pdf



Ruby on Rails: ¿Puedes poner el código Ruby en un archivo de configuración YAML? (5)

En los rieles 4.2 usando la sintaxis de ERB se evaluará el código y las cadenas de retorno.

# environment variables S3_KEY=01234 S3_SECRET=56789 # yaml file access_key_id: <%= ENV[''S3_KEY''] %> secret_access_key: <%= ENV[''S3_SECRET''] %> # then you can do ENV.fetch(''access_key_id'') => "01234" ENV.fetch(''secret_access_key'') => "56789"

También puede escribir código ruby ​​en una cadena en su archivo YAML y luego evaluarlo más tarde

# yaml file retry_interval: ''5.minues'' # then you can do eval(ENV.fetch(''retry_interval'')) => 300 seconds

PRECAUCIÓN: tenga mucho cuidado al usar eval, ya que puede presentar un riesgo grave de seguridad

Me gustaría hacer algo como esto en mi archivo de configuración amazon_s3.yml:

access_key_id: ENV[''S3_KEY''] secret_access_key: ENV[''S3_SECRET'']

... pero sé que esto no está funcionando. No estoy seguro de si es posible, pero ¿puedes poner el código Ruby en un archivo YAML?


Funciona como un encanto para mí sin ningún código adicional (Rails 4.2):

default: &default adapter: <%= ''mysql2'' %>


No normalmente / directamente. Digo esto porque para usar los resultados de ruby ​​necesitas usar algo como ERB antes de cargar el archivo. En términos de código, debe pasar de algo como:

loaded_data = YAML.load_file("my-file.yml")

O incluso

loaded_data = YAML.load(File.read("my-file.yml"))

A:

loaded_data = YAML.load(ERB.new(File.read("my-file.yml")).result)

En este caso específico, tendría que ver qué está cargando el archivo; en algunos casos, puede que ya esté diseñado para cargarlo directamente fuera del entorno o puede necesitar:

  1. Monkey Patch el código
  2. Fork + Usa tu versión personalizada.

Dado que hay algunos complementos que usan amazon_s3.yml, podría valer la pena publicar qué biblioteca está utilizando que lo usa; alternativamente, creo que de una búsqueda rápida de Google que la biblioteca de AWS le permite definir AMAZON_ACCESS_KEY_ID y AMAZON_SECRET_ACCESS_KEY como env avars y lo hará recogerlos de la caja.


Puede hacerlo si se interpreta a través de ERB, en cuyo caso actúa como una vista de ERB y el código de Ruby va entre <% y %>

Tratar:

access_key_id: <%= ENV[''S3_KEY''] %> secret_access_key: <%= ENV[''S3_SECRET''] %>

... y ver si funciona


Usando el ejemplo de fd., Intente intercambiar la sintaxis de ERB con interpolación de cadenas si su aplicación está configurada para usar HAML. P.ej,:

access_key_id: #{ENV[''S3_KEY'']} secret_access_key: #{ENV[''S3_SECRET'']}

en lugar de:

access_key_id: <%= ENV[''S3_KEY'']} %> secret_access_key: <%= ENV[''S3_SECRET''] %>