ruby-on-rails - run - procfile heroku rails
Empujar los rieles con SQLite3 a Heroku falla (7)
Debido a su arquitectura, Heroku solo permite postgres, por lo que la gema sqlite no está instalada.
Esta pregunta ya tiene una respuesta aquí:
Experimento el mismo escenario descrito en el problema de implementación de Heroku cuando trato de implementar mi aplicación Rails 3 en Heroku y sqlite3 se define en el archivo gems.
/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.0/lib/bundler/runtime.rb:64:in `require '': no se carga ese archivo - sqlite3 (LoadError)
¿Alguna pista de por qué es esto? La solución definida en el ruby-forum funciona, solo me preguntaba por qué.
I thing sqlite3 intencionalmente no se proporciona en Heroku porque este sistema de base de datos es una base de datos incrustada que se ejecuta en el mismo proceso que la aplicación. Heroku es un entorno distribuido, lo que significa que la misma aplicación puede ejecutarse en muchas máquinas dentro de muchos procesos. Eso daría múltiples instancias sqlite3 separadas, totalmente sin relación (imagina dos mysqls separadas aisladas en dos máquinas).
En un entorno distribuido, al menos debe utilizarse la base de datos de tipo centralizado ''cliente-servidor'', por ejemplo: MySQL, PostgreSQL, Oracle.
Asegúrese de no incluir sqlite en su Gemfile en entornos de producción:
Esto es correcto:
source :gemcutter
gem ''rails''
group :development, :test do
gem ''sqlite3-ruby'', :require => ''sqlite3''
end
Esto está mal:
source :gemcutter
gem ''rails''
gem ''sqlite3-ruby'', :require => ''sqlite3''
SQLite requiere un sistema de archivos grabable permanente. (es decir, su programa finalmente necesita acceso a las llamadas de la API POSIX fopen () y fwrite () a un archivo en particular). Heroku no proporciona un sistema de archivos grabable permanente . Por lo tanto, SQLite 3 no funcionará.
Para versiones más recientes de Sqlite, puede usar esto en su lugar:
group :development, :test do
gem ''sqlite3''
end
Esto me lo arregló.
no olvides eliminar la siguiente sección
Ignora la base de datos SQLite predeterminada.
/db/*.sqlite3
del archivo .gitignore
. Se crea con esta declaración si usa un comando "rails new your-application-name"
Heroku no es compatible con SQLite. Del artículo de Heroku SQLite en Heroku :
Aunque es fácil de usar, SQLite no pretende ser una base de datos de grado de producción. En cambio, Heroku proporciona bases de datos PostgreSQL de grado de producción como servicio.
¿Por qué SQLite es una mala opción para correr en Heroku?
Almacenamiento respaldado por disco
SQLite se ejecuta en la memoria y hace una copia de seguridad de su almacén de datos en archivos en el disco. Si bien esta estrategia funciona bien para el desarrollo, la pila Cedar de Heroku tiene un sistema de archivos efímero . Puede escribir en él, y puede leer de él, pero el contenido se borrará periódicamente. Si usaras SQLite en Heroku, perderías toda tu base de datos al menos una vez cada 24 horas.
Incluso si los discos de Heroku fueran persistentes, ejecutar SQLite aún no sería una buena opción. Como SQLite no se ejecuta como un servicio, cada banco de pruebas ejecutaría una copia en ejecución por separado. Cada una de estas copias necesita su propia tienda respaldada por disco. Esto significa que cada dyno que alimente su aplicación tendrá un conjunto de datos diferente ya que los discos no están sincronizados.
En lugar de utilizar SQLite en Heroku, puedes configurar tu aplicación para que se ejecute en Postgres.