Как установить sqlite3 для Ruby на Windows?

Будучи действительно новичком в Ruby/Rails, и после попытки решить проблему самостоятельно в эти выходные, я пытаюсь обратиться за советом здесь.

У меня есть полная установка Ruby/Apache/Passenger на FreeBSD, и я пытаюсь выполнить задачу использования Windows в качестве среды разработки Ruby.

До сих пор:

  • Ruby установлен, v2.0.0p0 (2013-02-24) [x64-ming32]
  • Rails установлен, v.3.2.12
  • У меня установлен и зарегистрирован Ruby Dev Kit.
  • У меня есть sqlite3 dll/exe, скопированная в папку Ruby "bin" (которая также находится в моем пути с помощью консоли "Запустить командную строку с Ruby".)
  • Я могу успешно запустить сервер rails и продолжить с учебника http://guides.rubyonrails.org/getting_started.html до версии 3.3.
  • "> rake db: create" говорит мне:

    Пожалуйста, установите адаптер gem install activerecord-sqlite3-adapter: gem install activerecord-sqlite3-adapter (sqlite3 не входит в комплект. Добавьте его в Gemfile.)

которого я не имею "понимания". Попытка установить activerecord-sqlite3-адаптер дает мне "Не удалось найти правильный драгоценный камень..."

  • "> gem install sqlite3" возвращает:

    Building native extensions. This could take a while... Building native extensions. This could take a while... ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension.

    D: /Development/Ruby200-x64/bin/ruby.exe extconf.rb checking for sqlite3.h... *** extconf.rb failed ***

Прямо сейчас я застрял в точке, где я даже не знаю, в каком состоянии находится моя установка Ruby на Windows. Я пытаюсь следовать основному учебнику по Rails, и он не определяет ни одну из этих проблем (возможно, потому что Ruby на Windows, кажется, естественная боль для многих людей.)

Что мне не хватает?!? Я просто пытаюсь установить sqlite3 для Ruby на Windows, кажется простым, не так ли?

Если я сделаю ">rais db" оболочка SQLite будет представлена:

SQLite version 3.7.15.2 2013-01-09 11:53:05

Подобные вопросы с шагами, которые не решают мою проблему: Установка SQLite 3.6 В Windows 7

Ответ 1

Несмотря на то, что на вопрос был дан ответ, я хочу опубликовать свое исследование, чтобы помочь другим. Я нашел много информации в Интернете, но, будучи новичком в Ruby, мне пришлось тяжело следить за всеми. Основной ответ приходит из следующего сообщения https://github.com/luislavena/sqlite3-ruby/issues/82 с инструкциями "paulwis" о том, как правильно установить sqlite3 для ruby ​​2.0.0-p0 и некоторые комментарии на https://github.com/rails/rails/issues/10150. Итак, вот оно:

  • Установите Ruby Devkit для вашей установки (DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe для меня, так как я использую машину x64)
  • Загрузите и извлеките пакет autoconf с сайта Sqlite.org
  • Запустите msys.bat(он находится в корневой папке ruby ​​devkit)
  • cd в путь, на который вы загрузили источник sqlite (например: "cd/c/dev/sqlite3" для пути "c:\dev\sqlite3", если вы новичок в MSYS/MINGW32)
  • Запустить "./configure"
  • Запустить "make"
  • Запустить "make install"
  • Получите драгоценный камень sqlite3 еще раз, на этот раз указав платформу и путь к вновь скомпилированным двоичным файлам:

    gem install sqlite3 --platform=ruby -- --with-sqlite3-include=[path\to\sqlite3.h] --with-sqlite3-lib=[path\to\sqlite3.o]
    

    Например:

    gem install sqlite3 --platform=ruby -- --with-sqlite3-include=/c:/dev/sqlite3/ --with-sqlite3-lib=/c:/dev/sqlite3/.libs/
    

    (из путей, указанных на шаге 4)

  • Проверьте Gemfile.lock вашего приложения rails и убедитесь, что он указывает на правильную версию sqlite3. Шахта была "sqlite3 (1.3.7-x86-mingw32)" и вручную изменила ее на "sqlite3 (1.3.7-x64-mingw32)". Снятие платформы также работает: "sqlite3 (1.3.7)".

Надеюсь, это поможет кому-то.

Ответ 2

Мне удалось установить sqlite3 с ruby2.0.0 на win XP32 с помощью следующей команды:

c:\>gem install sqlite3 --platform=ruby -- --with-sqlite3-dir=C:/distr/sqlite --with-sqlite3-include=C:/distr/sqlite

Папка C:/distr/sqlite содержит следующие файлы

  • shell.c
  • sqlite3.c
  • sqlite3.h
  • sqlite3ext.h
  • sqlite3.def
  • sqlite3.dll

Итак, в основном я извлекаю sqlite-amalgamation-3071602.zip и sqlite-dll-win32-x86-3071602.zip в C:/distr/sqlite.

HEADS UP

Вам все равно нужно поместить копию sqlite3.dll и sqlite3.def где-то в PATH. Имхо лучше хранить двоичные файлы sqlite3 в папке ruby ​​bin.

Ответ 3

#!/usr/bin/env sh

mkdir c:/sqlite3x86
wget -P c:/sqlite3x86 http://packages.openknapsack.org/sqlite/sqlite-3.7.15.2-x86-windows.tar.lzma
cd c:/sqlite3x86
bsdtar --lzma -xf c:/sqlite3x86/sqlite-3.7.15.2-x86-windows.tar.lzma
gem install sqlite3 --platform=ruby -- --with-opt-dir=c:/sqlite3x86
cd c:/
rm -rf c:/sqlite3x86

Ответ 4

Для окон перейдите в C: /Ruby25-x64/lib/ruby/gems/2.5.0/gems/sqlite3-1.3.13-x64-mingw32/lib/sqlite3.rb

и убедитесь,

require "sqlite3" вместо родного

Ответ 6

Я подумал, что отвечу - из комментариев, ради потомства. Проблема заключалась в том, что я взял новую версию Ruby/Rails (для Windows), которая еще не была совместима с SQLite3.

Я понизил рейтинг до 1.9.x и смог выполнить все действия.

Ответ 7

Самый простой способ настроить Ruby on Rails на машине Windows - это использовать RailsInstaller, который автоматически устанавливает и настраивает sqlite3 для вас. Один шаг.

http://railsinstaller.org/en

Ответ 9

Это старая ветка, но все еще актуальная.

Для нас это было так же просто, как редактирование Gemfile и добавление конкретной версии для sqlite:

gem 'sqlite3', '~> 1.3.13

Ответ 10

Я собираюсь ответить на этот вопрос еще раз, потому что один модератор mofo удалил мой предыдущий пост. Любой модератор, читающий этот пост, понимает:

  • Эта проблема не имеет прямого решения. SQLite постоянно ломается под Windows. Решения для его исправления всегда разные. Единственное решение - найти ухоженное руководство, которое объясняет каждый шаг.
  • Вот такое руководство: https://medium.com/ruby-on-rails-web-application-development/how-to-install-rubyonrails-on-windows-7-8-10-complete-tutorial-2017- fc95720ee059
  • Если бы я скопировал и вставил решения из этого руководства, это был бы очень длинный и дублированный ответ.