Ruby on Rails
![]() | ![]() |
Gema Sqlite 3
Hola a todos!Estoy escribiendo sobre los errores que encontre mientra intentaba instalar Ruby on Rails nuevamente desde cero en un sistema Windows, el principal error que encontre fue con la gema SQLite3 cuando intentaba crear un nuevo proyecto.
Instale muchas veces Ruby On Rails en el pasado usando Ruby Installer de https://rubyinstaller.org/ y Rails Installer (Ruby 2.3 and Ruby 2.2) de http://railsinstaller.org
Pero esta vez no fue tan simple como siempre.
Con SQLite 3 ya instalado con version 3.26.0
C:\Sites>sqlite3 -version 3.26.0 2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600 fb58238b4f9
Instalé Rails con railsinstaller-3.4.0.exe y luego instale el Ruby Devkit rubyinstaller-devkit-2.6.1-1-x64.exe.
C:\Sites>ruby -v ruby 2.6.1p33 (2019-01-30 revision 66950) [x64-mingw32] C:\Sites>rails -v Rails 5.2.2
Abri la consola y corrí el famoso Hello World
C:\Sites>rails new blog
Comenzó bien pero aparecio un error unos minutos despues
Fetching sqlite3 1.4.0
Installing sqlite3 1.4.0 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory:
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/sqlite3-1.4.0/ext/sqlite3
C:/RailsInstaller/Ruby2.3.3/bin/ruby.exe -I
C:/RailsInstaller/Ruby2.3.3/lib/ruby/site_ruby/2.3.0 -r
./siteconf20190217-4316-6m19zc.rb extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Install SQLite3 from http://www.sqlite.org/ first.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=C:/RailsInstaller/Ruby2.3.3/bin/$(RUBY_BASE_NAME)
--with-sqlcipher
--without-sqlcipher
--with-sqlite3-config
--without-sqlite3-config
--with-pkg-config
--without-pkg-config
--with-sqlcipher
--without-sqlcipher
--with-sqlite3-dir
--without-sqlite3-dir
--with-sqlite3-include
--without-sqlite3-include=${sqlite3-dir}/include
--with-sqlite3-lib
--without-sqlite3-lib=${sqlite3-dir}/lib
To see why this extension failed to compile, please check the mkmf.log which can
be found here:
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/extensions/x86-mingw32/2.3.0/sql
ite3-1.4.0/mkmf.log
extconf failed, exit code 1
Gem files will remain installed in
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/sqlite3-1.4.0 for
inspection.
Results logged to
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/extensions/x86-mingw32/2.3.0/sql
ite3-1.4.0/gem_make.out
An error occurred while installing sqlite3 (1.4.0), and Bundler cannot continue.
Make sure that `gem install sqlite3 -v '1.4.0' --source 'https://rubygems.org/'`
succeeds before bundling.
In Gemfile:
sqlite3
C:\Sites>
Asi que sobre esto, aqui estan algunas de las soluciones que intente y NO funcionaron pero dependiendo de la configuracion de su entorno puede que sean utiles para algunos de ustedes
1* Descargar y compilar los archivos de https://www.sqlite.org/download.html
La pagina oficial tiene una guia muy bien explicada de como y cuales archivos descargar y compilar aqui https://www.sqlite.org/howtocompile.html
Ademas para aquellos que estan comenzando...
If using the MinGW compiler, the command-line is this:
gcc -shared sqlite3.c -o sqlite3.dll
El compilador MinGW se encuentra en C:\Ruby26-x64\msys64 o C:\Ruby26-x32\msys32 (dependiendo de tu sistema y tu instalacion de Ruby) es un archivo .exe que abre una consola de linea de comandos.
Es recomendado poner la carpeta SQLite a compilar en el directorio raiz (C:/) porque devuelve un error si una de las carpetas tiene un nombre con caracteres especiales o espacios
http://www.mingw.org/wiki/Getting_Started
Es recomendado poner la carpeta SQLite a compilar en el directorio raiz (C:/) porque devuelve un error si una de las carpetas tiene un nombre con caracteres especiales o espacios
-bash: cd: too many argumentsUsualmente esto es suficiente pero si esto no funciona puedes descargar el MinGW Installer Manager para obtener los archivos faltantes
http://www.mingw.org/wiki/Getting_Started
2* Agregar la carpeta compilada de SQLite 3 al PATH (no solo el archivo compilado sqlite3.dll, tambien los archivos de la carpeta sqlite-tools-win32-x86-3260000 )
3* Corriendo el comando para crear un nuevo proyecto y luego de que falle, modificar el archivo Gemfile
Cambiar esta linea por alguna de estas 3 abajo:
Tambien se puede remover esta linea
Y correr nuevamente el comando "bundle install"
C:\Sites>cd project_name C:\Sites\project_name>bundle install
Acerca de esta solucion debo decir que depende de la configuracion de la instalacion para cual opcion resulte ya que en mi caso cuando instalaba primero RubyInstaller y luego RailsInstaller funciona pero si es al reves el sistema no encuentra los archivos MinGW y devuelve error, incluso modificando el PATH para usar los archivos del Ruby Devkit, donde esta MinGW, el sistema sigue buscando dentro de C:/RailsInstaller/Ruby2.3.3/
Es realmente una pena porque cuando intentas instalar una gema globalmente para todos los proyectos te devuelve "Gemfile not found"
Asi que solo funcionara repitiendo estos pasos por cada proyecto que se cree y si el sistema esta correctamente configurado
4* Intente descargando la gema desde https://rubygems.org/ e instalarla usando el parametro --local = 'path'
gem install --local C:\gemdownloadfolder\sqlite3-1.4.0.gemEsto no funciono por los errores de la configuracion que quedaron por installar primero RailsInstaller y luego RubyInstaller pero otros desarrolladores han tenido 0 inconvenientes con esta solucion
Final solution
5* Desinstalar Rails utilizando el ejecutable en C:/RailsInstaller/ luego de que termine remover las carpetas remanentes o sino el sistema seguira buscando "ruby" en "C:/RailsInstaller/Ruby2.3.3/bin" incluso cuando esta vacia y retornara un folder is missing (no dejar ningun archivo sirve para forzar el sistema a reconocer ruby en la carpeta "C:\Ruby26-x64\bin" como unico disponible).Ok, ahora solo nos queda Ruby DevKit y SQLite 3 instalados.
Executar el siguiente comando para instalar rails atravez de la linea de comandos
C:\Sites>gem install railscuando finalize instalar MinGW
C:\Sites>ridk exec pacman -S mingw-w64-x86_64-dlfcnsi MinGW no esta instalado en una carpeta reconocible por el sistema devolvera este error
ERROR: Failed to build gem native extension.
current directory: C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sqlite3-1.4.0/ext/
sqlite3
C:/Ruby26-x64/bin/ruby.exe -I C:/Ruby26-x64/lib/ruby/2.6.0 -r ./siteconf20190221
-4120-l5mva9.rb extconf.rb
checking for sqlite3.h... yes
checking for pthread_create() in -lpthread... yes
checking for -ldl... no
checking for dlopen()... no
missing function dlopen
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Descargar la gema de SQLite3 de https://rubygems.org/ y guardarla en local. Entonces correr la linea de comandos desde esa carpeta. Puedes correrlo por cada proyecto o globalmente.C:\Sites>gem install --local C:\sqlite3-1.4.0.gem Temporarily enhancing PATH for MSYS/MINGW... Installing required msys2 packages: mingw-w64-x86_64-sqlite3 warning: mingw-w64-x86_64-sqlite3-3.27.0-1 is up to date -- skipping Building native extensions. This could take a while... Successfully installed sqlite3-1.4.0 Parsing documentation for sqlite3-1.4.0 Installing ri documentation for sqlite3-1.4.0 Done installing documentation for sqlite3 after 2 seconds 1 gem installed C:\Sites>Si se corre en la carpeta Sites en vez de en un proyecto especifico no se volvera a producir el error cuando crees un nuevo proyecto
C:\Sites>rails new demo5
create
create README.md
create Rakefile
create .ruby-version
create config.ru
create .gitignore
create Gemfile
run git init from "."
Initialized empty Git repository in C:/sites2/demo5/.git/
create package.json
create app
create app/assets/config/manifest.js
create app/assets/javascripts/application.js
create app/assets/javascripts/cable.js
create app/assets/stylesheets/application.css
create app/channels/application_cable/channel.rb
create app/channels/application_cable/connection.rb
create app/controllers/application_controller.rb
create app/helpers/application_helper.rb
create app/jobs/application_job.rb
create app/mailers/application_mailer.rb
create app/models/application_record.rb
create app/views/layouts/application.html.erb
create app/views/layouts/mailer.html.erb
create app/views/layouts/mailer.text.erb
create app/assets/images/.keep
create app/assets/javascripts/channels
create app/assets/javascripts/channels/.keep
create app/controllers/concerns/.keep
create app/models/concerns/.keep
create bin
create bin/bundle
create bin/rails
create bin/rake
create bin/setup
create bin/update
create bin/yarn
create config
create config/routes.rb
create config/application.rb
create config/environment.rb
create config/cable.yml
create config/puma.rb
create config/storage.yml
create config/environments
create config/environments/development.rb
create config/environments/production.rb
create config/environments/test.rb
create config/initializers
create config/initializers/application_controller_renderer.rb
create config/initializers/assets.rb
create config/initializers/backtrace_silencers.rb
create config/initializers/content_security_policy.rb
create config/initializers/cookies_serializer.rb
create config/initializers/cors.rb
create config/initializers/filter_parameter_logging.rb
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/initializers/new_framework_defaults_5_2.rb
create config/initializers/wrap_parameters.rb
create config/locales
create config/locales/en.yml
create config/master.key
append .gitignore
create config/boot.rb
create config/database.yml
create db
create db/seeds.rb
create lib
create lib/tasks
create lib/tasks/.keep
create lib/assets
create lib/assets/.keep
create log
create log/.keep
create public
create public/404.html
create public/422.html
create public/500.html
create public/apple-touch-icon-precomposed.png
create public/apple-touch-icon.png
create public/favicon.ico
create public/robots.txt
create tmp
create tmp/.keep
create tmp/cache
create tmp/cache/assets
create vendor
create vendor/.keep
create test/fixtures
create test/fixtures/.keep
create test/fixtures/files
create test/fixtures/files/.keep
create test/controllers
create test/controllers/.keep
create test/mailers
create test/mailers/.keep
create test/models
create test/models/.keep
create test/helpers
create test/helpers/.keep
create test/integration
create test/integration/.keep
create test/test_helper.rb
create test/system
create test/system/.keep
create test/application_system_test_case.rb
create storage
create storage/.keep
create tmp/storage
create tmp/storage/.keep
remove config/initializers/cors.rb
remove config/initializers/new_framework_defaults_5_2.rb
run bundle install
Fetching gem metadata from https://rubygems.org/.............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...........
Using rake 12.3.2
Using concurrent-ruby 1.1.4
Using i18n 1.5.3
Using minitest 5.11.3
Using thread_safe 0.3.6
Using tzinfo 1.2.5
Using activesupport 5.2.2
Using builder 3.2.3
Using erubi 1.8.0
Using mini_portile2 2.4.0
Using nokogiri 1.10.1 (x64-mingw32)
Using rails-dom-testing 2.0.3
Using crass 1.0.4
Using loofah 2.2.3
Using rails-html-sanitizer 1.0.4
Using actionview 5.2.2
Using rack 2.0.6
Using rack-test 1.1.0
Using actionpack 5.2.2
Using nio4r 2.3.1
Using websocket-extensions 0.1.3
Using websocket-driver 0.7.0
Using actioncable 5.2.2
Using globalid 0.4.2
Using activejob 5.2.2
Using mini_mime 1.0.1
Using mail 2.7.1
Using actionmailer 5.2.2
Using activemodel 5.2.2
Using arel 9.0.0
Using activerecord 5.2.2
Using mimemagic 0.3.3
Using marcel 0.3.3
Using activestorage 5.2.2
Using public_suffix 3.0.3
Using addressable 2.6.0
Using io-like 0.3.0
Using archive-zip 0.11.0
Using bindex 0.5.0
Using msgpack 1.2.6 (x64-mingw32)
Using bootsnap 1.4.0
Using bundler 1.17.2
Using byebug 11.0.0
Using regexp_parser 1.3.0
Using xpath 3.2.0
Using capybara 3.13.2
Using ffi 1.10.0 (x64-mingw32)
Using childprocess 0.9.0
Using chromedriver-helper 2.1.0
Using coffee-script-source 1.12.2
Using execjs 2.7.0
Using coffee-script 2.4.1
Using method_source 0.9.2
Using thor 0.20.3
Using railties 5.2.2
Using coffee-rails 4.2.2
Using duktape 2.0.1.0
Using multi_json 1.13.1
Using jbuilder 2.8.0
Using puma 3.12.0
Using sprockets 3.7.2
Using sprockets-rails 3.2.1
Using rails 5.2.2
Using rb-fsevent 0.10.3
Using rb-inotify 0.10.0
Using rubyzip 1.2.2
Using sass-listen 4.0.0
Using sass 3.7.3
Using tilt 2.0.9
Using sass-rails 5.0.7
Using selenium-webdriver 3.141.0
Using sqlite3 1.4.0
Fetching turbolinks-source 5.2.0
Installing turbolinks-source 5.2.0
Fetching turbolinks 5.2.0
Installing turbolinks 5.2.0
Fetching tzinfo-data 1.2018.9
Installing tzinfo-data 1.2018.9
Fetching uglifier 4.1.20
Installing uglifier 4.1.20
Fetching web-console 3.7.0
Installing web-console 3.7.0
Bundle complete! 16 Gemfile dependencies, 77 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
... Using selenium-webdriver 3.141.0 Using sqlite3 1.4.0 Fetching turbolinks-source 5.2.0 ...Buena suerte!
Hay mucha gente que prefiere utilizar Ruby on Rails con PostgreSQL pero hay muchos otros que necesitan o prefieren SQLite 3 por que es una base de datos basada en archivos, lo que la hace mas rapida que otras y portable.
Por ejemplo es perfecta para aplicaciones de un solo usuario, un juego, aplicaciones cross-platform que actuan como nativas o porque es mas facil el testeo durante la etapa de desarrollo.
Tambien se ha vuelto muy util ya que Javascript, Node.JS, Phonegap, Xamarin y Android Java pueden conectar con bases de datos SQLite que son guardadas localmente en los dispositivos.
Actualmente hay muchas paginas que aprovechan esta utilidad para evitar la perdida de informacion por cortes de internet, operaciones que fallan, entre otras.
O simplemente para evitar transferir informacion innecesaria a la nube, ya sea por seguridad del usuario, performance, rapidez de respuesta, asi como evitar el uso innecesario de espacio de disco en el servidor o banda ancha.
Esto ha abierto una increible cantidad de nuevas posibilidades y funcionalidades, especialmente desde que Ruby on Rails, conocido por ser una tecnologia de back-end fuerte y segura comenzara a ser utilizada para construir APIs con Ruby on Rails API, de esta forma muchos sitios web han sido complementados con aplicaciones moviles nativas




Comments
Post a Comment
Thanks for commenting :D