Usa Cloud Storage

Puedes usar Cloud Storage para almacenar y entregar archivos tal como películas, imágenes y otros contenidos estáticos.

En este documento se describe cómo utilizar la biblioteca cliente de Google Cloud en tu app para almacenar y recuperar datos de Cloud Storage.

Antes de comenzar

  • Sigue las instrucciones en “Hello, World!” para Ruby en App Engine a fin de configurar el entorno y el proyecto, y comprender cómo se estructuran las apps de Ruby en App Engine. Anota y guarda el ID del proyecto, ya que lo necesitarás para ejecutar la aplicación de muestra que se describe en este documento.

  • Asegúrate de crear un bucket de Cloud Storage para tu aplicación con este comando:

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Haz que el bucket pueda leerse públicamente para que pueda entregar archivos:

    gsutil defacl set public-read gs://[YOUR_BUCKET_NAME]
    

Descarga la muestra

Para clonar el repositorio:

git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples/
cd ruby-docs-samples/appengine/storage

Instala dependencias y edita la configuración del proyecto

En app.yaml, configura GCLOUD_STORAGE_BUCKET en el depósito de Cloud Storage que creaste para tu proyecto.

runtime: ruby
env: flex
entrypoint: bundle exec ruby app.rb

env_variables:
  GOOGLE_CLOUD_STORAGE_BUCKET: <your-bucket-name>

Ten en cuenta que debes incluir la biblioteca de gcloud en Gemfile para usar las funciones de Cloud Storage.

source "https://rubygems.org"

gem "google-cloud-storage"
gem "sinatra"

Código de la aplicación

La aplicación de muestra presenta una página web en la que se solicita al usuario que proporcione un archivo para almacenarlo en Cloud Storage. Cuando el usuario selecciona un archivo y hace clic en Enviar, el controlador de carga sube el contenido del archivo en un BLOB y lo escribe en Cloud Storage.

Recuerda que, después de subir el archivo a Cloud Storage, se muestra la URL pública del archivo y podrás utilizarla para entregarlo directamente desde Cloud Storage. Debes guardar este valor en la app para usarlo más adelante.

require "sinatra"
require "google/cloud/storage"

storage = Google::Cloud::Storage.new
bucket  = storage.bucket ENV["GOOGLE_CLOUD_STORAGE_BUCKET"]

get "/" do
  # Present the user with an upload form
  '
    <form method="POST" action="/upload" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="Upload">
    </form>
  '
end

post "/upload" do
  file_path = params[:file][:tempfile].path
  file_name = params[:file][:filename]

  # Upload file to Google Cloud Storage bucket
  file = bucket.create_file file_path, file_name, acl: "public"

  # The public URL can be used to directly access the uploaded file via HTTP
  file.public_url
end

Para obtener más información

Para obtener más información sobre Cloud Storage, consulta la documentación de Cloud Storage.