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:
- Monkey Patch el código
- 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''] %>