не могу загрузить такой файл - sqlite3 / sqlite3_native (LoadError) на ruby ​​на рельсах


84

Когда я пытаюсь настроить базовую установку и запуск сервера с помощью Rails 4.0.0 на Ruby 2.0.0, я получаю следующее сообщение об ошибке.

/usr/local/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7/lib/sqlite3.rb:6:in `require': cannot load such file -- sqlite3/sqlite3_native (LoadError)
    from /usr/local/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7/lib/sqlite3.rb:6:in `rescue in <top (required)>'
    from /usr/local/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7/lib/sqlite3.rb:2:in `<top (required)>'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `block (2 levels) in require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `each'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `block in require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `each'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler.rb:132:in `require'
    from /home/penchal/new/site/config/application.rb:7:in `<top (required)>'
    from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:76:in `require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:76:in `block in <top (required)>'
    from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `tap'
    from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

Как мне избежать появления этого сообщения об ошибке и продолжить работу?


на какой ОС вы это примеряете?
Saifis

Кажется, проблема с окнами. Решения различаются. Посмотрите, подойдет ли это для вас stackoverflow.com/a/6126062/2576857 .
Doodad

1
Но не похоже, что он использует окна. Может быть, эта статья поможет.
Althaf Hameez

Ах да, / usr / local / etc, теперь это увидел, моя проблема. Из того, что я обнаружил, у большинства людей эта проблема возникла из-за того, что sqlite exe и dll не были в переменной PATH, но это произошло только с пользователями Windows. Я думаю, что эта статья должна попасть в самую точку, но давайте подождем и посмотрим.
Doodad

Если Rails 4 и Ruby 2.1. - смотрите здесь
ученик

Ответы:


121

Найдите свой файл gemspec sqlite3. Одним из примеров является /usr/local/share/gem/specifications/sqlite3-1.3.7.gemspec

Окна C:\Ruby21\lib\ruby\gems\2.1.0\specifications.

Вы должны настроить в соответствии с вашим путем Rubygem и версией sqlite3. Отредактируйте файл выше и найдите следующую строку

s.require_paths=["lib"]

измените это на

s.require_paths= ["lib/sqlite3_native"]

7
Это фантастическая ошибка проблемы, которой вообще не должно быть, учитывая количество пользователей Rails в Windows. Я хотел бы знать, почему именно это работает ...

1
Это работало для 1.3.9, но не обязательно для 1.3.11. Я на Win7 x64.
Kidquick,

3
Он уже представлен и ошибка: не удалось загрузить active_record / connection_adapters / sqlite3_adapter. Убедитесь, что адаптер в config / database.yml действителен. Если вы используете адаптер, отличный от mysql2, postgresql или sqlite3, добавьте необходимый гем адаптера в Gemfile.
Стерлинг Диас

3
указанная выше ошибка с адаптером кажется неразрешимой, выполнение того, что предлагает hwding ниже, сначала сэкономило бы мне некоторое время - опять же, возможно, они исправят это в следующих выпусках или исправят это в пакетных пакетах, таких как RailsInstaller ( ruby2.3.1 с devkit (mingw с инструментами сборки), rails5.0.0.1) ps невероятно, что эта проблема все еще сохраняется, спустя 2 года - учитывая, что sqlite используется по умолчанию в скелетном приложении по умолчанию, и это способ пойти в guides.rubyonrails.org/getting_started.html
hello_earth

2
Два года? Как насчет ТРИ года?
Уоррен П.

19

см. :https://stackoverflow.com/a/39136421/6755206

к счастью, вам не нужно переходить на Ruby 2.0
, после бесконечных попыток есть решение этой проблемы ...

https://github.com/hwding/sqlite3-ruby-win


Шаги

Предварительно

  • gem uninstall sqlite3 --all

Источник

Построить

  • запустить командную строку в извлеченном каталоге
  • убедитесь, что у вас установлен компилятор C и добавлен в PATH
  • gem install bundler
  • bundle install
  • rake native gem
  • вы найдете созданный каталог с именем 'pkg'

Установить

  • введите dir 'pkg'
  • gem install --local sqlite3-xxx.gem ('xxx' - код версии)

Проверьте

  • irb
  • require 'sqlite3'

1
Спасибо @hwding. Это прекрасно работает! В моем случае, пользователь Windows, кажется, что две версии sqlite3 (32 и 64 бит) были скомпилированы в «pkg», но я только что установил 64-битную (мой случай).
aaossa

1
да, после долгих попыток это единственный способ, который сработал .... другие люди ( reddit.com/r/rails/comments/30s1cz/… ) предлагают перейти на что-то вроде vagrant и вообще пропустить Windows + Rails
hello_earth

1
Я подтверждаю, что это единственное решение, работающее для Windows 10; попробовал пару исправлений, но это единственный работающий.
numediaweb

1
Я сделал в соответствии с упомянутыми шагами, но я не вижу ни одной папки, созданной с таким именем pkg.
Яшу Миттал

Работало у меня до тех пор, you'll find a dir named 'pkg' generatedпока нигде не видел такой директории. Решение @Edson Momm ниже сработало для меня.
MSC

19

Поскольку запрос на вытягивание № 229 был объединен, sqlite3 можно установить для каждого git:ключа. С помощью этого дополнения можно легко использовать sqlite3 в ваших Gemfile:

gem 'sqlite3', git: "https://github.com/sparklemotion/sqlite3-ruby"

Это работает на RubyInstaller-2.4 и новее. Он автоматически устанавливает необходимый пакет pacman mingw-w64-x86_64-sqlite3при запускеbundler install .

Есть еще несколько советов по Rails в Windows в FAQ RubyInstaller2 .


1
Этот ответ полезен для новых установщиков рубиновой версии ruby 2.5.1p57 (29 марта 2018 г., редакция 63029) и версии rails Rails 5.2.1
KTM

1
Между тем PR был объединен. Я соответствующим образом обновил свой ответ.
Ларс Канис

Чтобы обойти проблемы с SSL, я использовал: gem 'sqlite3', git: "git: //github.com/sparklemotion/sqlite3-ruby.git"
GrabzIt

13
gem uninstall sqlite3 --all
ridk exec pacman -S mingw-w64-x86_64-sqlite3
gem inst sqlite3 --platform ruby

Это решило проблему для меня.

Windows 10
Ruby 2.5.3
Rails 5.2.2

1
OMG это реально: D Только это работает для меня, Windows 10 ужасна для RoR. Большое спасибо!
Пользователь 987

Работал и у меня. Моя проблема началась после обновления с Ruby 2.4 до
Ruby

Это был ответ и на Win10 Ruby 2.6 (x64). Спасибо!
vercingortix

Мне действительно приходилось проделывать это несколько раз. Похоже, что каждый раз, когда я делаю что-то bundle install, чтобы установить новый гем, я снова сталкивался с этой проблемой, и мне нужно было бы повторить вышеуказанные шаги.
vercingortix


5

Никакая компиляция исходников или загрузка предварительно скомпилированных библиотек не решит эту проблему, поверьте, я все перепробовал, проблема в другом. Вот как это работает в окнах:

bundle update sqlite3

Скорее всего, вы получите еще одну аналогичную ошибку после этой, касающуюся nokogiri, исправьте ее с помощью команды:

bundle update nokogiri

Наслаждайтесь своим приложением Ruby!




4

ЛУЧШАЯ ОФИЦИАЛЬНАЯ УСТАНОВКА

Я использую rails 5.2.1p57, Windows 10 Проблема с запуском следующих строк

gem uninstall sqlite3

и удалите все установленные версии. снова выполните следующую команду

gem install sqlite3 --platform=ruby

Теперь все готово. Сообщите мне, если проблема не исчезнет.


3

Если верхний ответ не работает, исправление, которое я обнаружил, просто идет в ваш Gemfile и добавляет номер версии 1.3.11 (вместо 1.3.9) сразу после sqlite3. Итак, строка в вашем Gemfile теперь должна читать:

# Use sqlite3 as the database for Active Record
gem 'sqlite3',  '1.3.11'

2

У меня была такая же ошибка, когда я обновил свою версию Ruby до 2.5.X. Я отслеживал, rails task --traceчто sqlite3 недоступен для версии 2.5, чем я изменяю свой GemFile, гем "sqlite3" меняется на "sqlite3-ruby", после того, как я удаляю гем "sqlite3" и, наконец, запускаюbundle install .

Не знаю, в чем причина ... Я читал, что sqlite3 пока недоступен для ruby ​​2.5, но я не уверен.


2

Чтобы избежать этой ошибки, убедитесь, что gem sqlite3он добавлен в ваш Gemfile. Затем извлеките «exe» и «dll» из ссылки для загрузки Sqlite в папку bin Ruby. Если проблема не устранена. Попробуй это:

bundle update

gem uninstall sqlite3

Имея возможность выбора между несколькими версиями sqlite3, выберите последний вариант «Все версии». Введите здесь последний номер

Выберите гем для удаления:
1. sqlite3-1.3.13
2. sqlite3-1.3.13-x64-mingw32
3. Все версии
> 3 .
.
Если вы удалите этот драгоценный камень, эти зависимости не будут соблюдены.
Продолжить удаление? [yN]
> y

gem install sqlite3 --platform=ruby

rails s

Это должно сработать.

Прочтите эту ссылку для получения дополнительных объяснений, если вышеуказанное работает для вас.


1

Это случилось и со мной. Оказалось, что я изначально установил SQLite 1.3.10, но затем я скопировал некоторые драгоценные камни из проекта скринкастов учебника Rails, и в нем был указан SQLite 1.3.9. Затем я получил ту же ошибку, что и вы. Я снова изменил его на 1.3.10, и все заработало.

(Это в Windows 7. Я запускал обучающее видео в Cloud9 IDE).


1

Это единственное решение, сработавшее для меня, полученное из этого сообщения о проблеме GitHub :

  1. Получите версию autoconf источников sqlite3 с https://www.sqlite.org/download.html .
  2. Запустите оболочку MSYS.
  3. В распакованном месте для вашего sqlite3, настроить статическую версию только избежать сохранения DLL на PATH: ./configure --disable-shared.
  4. Построить и установить его: make install DESTDIR=/c/dev/ruby/tmp. Вы можете сменить каталог.
  5. Откройте командную строку Windows и запустите, gem uninstall sqlite3 --allчтобы удалить все существующие драгоценные камни sqlite3.
  6. Снова в командной строке окна, сборки и установки sqlite3 гем: gem install sqlite3 --platform=ruby -- --with-sqlite3-include=C:\dev\ruby\tmp\usr\local\include --with-sqlite3-lib=C:\dev\ruby\tmp\usr\local\lib. Эти каталоги include и lib могут быть разными, поэтому сначала проверьте.

Я использую Ruby версии 2.5.1 и Rails версии 5.2.0 в Windows 10.


и файл gemspec в исходной папке Gem
Билал Кадри

1

я нашел это! я видел это https://www.youtube.com/watch?v=lsrzvX0qzmA
Я установил: Версия Rails: 5.2.1 Версия Ruby: 2.5.3 (x64-mingw32) Версия Sqlite 1.3.13
и у меня есть ваша проблема .. . мое решение:

  1. В папке установки, например C: \ Ruby25-x64 \ lib \ ruby ​​\ gems \ 2.5.0 \ gems \
    вас есть папки: "sqlite3-1.3.13" "sqlite3-1.3.13-x64-mingw32"
  2. Найти файл
    C: \ Ruby25-x64 \ lib \ ruby ​​\ gems \ 2.5.0 \ gems \ sqlite3-1.3.13 \ lib \ sqlite3 \ sqlite3_native.so
  3. Скопируйте его в C: \ Ruby25-x64 \ lib \ ruby ​​\ gems \ 2.5.0 \ gems \ sqlite3-1.3.13-x64-mingw32 \ lib \ sqlite3 \ 2.5 \ sqlite3_native.so (могут быть папки не существуют - создайте и вставить)

1

Обновлено

Добавление ниже в Gemfile исправлено для меня: gem 'sqlite3', '1.4.0', platform:: ruby


1

Измените свой sqlite3 gem в Gemfile для этого:

gem 'sqlite3', git: "https://github.com/larskanis/sqlite3-ruby", branch: "add-gemspec"

Затем запустите:

bundle install

0

Для пользователей OSX это может быть результатом использования менеджера рубинов (например, rvm).

Если вы отредактируете свой ~ / .bash_profile и добавите это:

[[ "$APP" = *"/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"* ]] && {
  echo Xcode detected
  rvm use system
}

Вы можете обойти проблему. Перезапустите Xcode перед повторной попыткой сборки.

Актуальная проблема отслеживается здесь: https://openradar.appspot.com/28726736 ).

Все права защищены: https://egeek.me/2018/04/14/ipa-export-error-in-xcode-and-ruby/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.