Нажатие Rails с SQLite3 на Heroku не выполняется

Я испытываю тот же сценарий, что описан в проблема развертывания Heroku, когда я пытаюсь развернуть мое приложение Rails 3 в Heroku, а sqlite3 определяется в файл драгоценных камней.

/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.0/lib/bundler/runtime.rb:64:in `require ': нет такого файла для загрузки - sqlite3 (LoadError)

Есть ли подсказка, почему это так? Решение, определенное на форуме ruby, работает, я просто задаюсь вопросом, почему.

Ответ 1

Убедитесь, что вы не включаете sqlite в свой Gemfile в производственных средах:

Это правильно:

source :gemcutter
gem 'rails'

group :development, :test do
  gem 'sqlite3-ruby', :require => 'sqlite3'
end

Это неправильно:

source :gemcutter
gem 'rails'        
gem 'sqlite3-ruby', :require => 'sqlite3'

Ответ 3

Из-за своей архитектуры, Heroku допускает только postgres, поэтому не установлен sqlite gem.

Ответ 4

Я делаю sqlite3 намеренно не предоставленным в Heroku, потому что эта система баз данных представляет собой встроенную базу данных, которая работает в том же процессе, что и приложение. Heroku - это распределенная среда, которая означает, что одно приложение может работать на многих машинах во многих процессах. Это даст несколько отдельных экземпляров sqlite3 - абсолютно несвязанных (представьте две изолированные отдельные mysqls на двух машинах).

В распределенной среде должна использоваться, по крайней мере, база данных централизованного типа "клиент-сервер", например: MySQL, PostgreSQL, Oracle.

Ответ 5

Для более поздних версий Sqlite вы можете использовать это вместо:

group :development, :test do
  gem 'sqlite3'
end

Это исправило это для меня.

Ответ 6

не забудьте удалить следующий раздел

Игнорировать базу данных SQLite по умолчанию.
/db/*.sqlite3

из .gitignore файла. Он создается с этим объявлением, если вы используете команду "rails new your-application-name"

Ответ 7

Heroku не поддерживает SQLite. Из статьи Heroku SQLite на Heroku:

Несмотря на простоту использования, SQLite не предназначен как база данных производственного класса. Вместо этого Heroku предоставляет техническую оценку PostgreSQL в качестве службы.

Почему SQLite плохо подходит для работы на Heroku?

Хранилище с резервным копированием

SQLite запускается в памяти и резервирует хранилище данных в файлах на диске. Хотя эта стратегия хорошо работает для разработки, стек Herokus Cedar имеет эфемерную файловую систему. Вы можете писать на него, и вы можете прочитать его, но содержимое будет очищено периодически. Если вы хотите использовать SQLite на Heroku, вы потеряете всю свою базу данных не реже одного раза в сутки.

Даже если бы диски Herokus были настойчивыми работами SQLite, все равно не было бы хорошо. Так как SQLite не запускается как служба, каждый динар будет запускать отдельную рабочую копию. Каждой из этих копий нужен собственный накопитель на диске. Это будет означать, что каждый динодействующий ваше приложение будет иметь другой набор данных, поскольку диски не синхронизированы.

Вместо использования SQLite на Heroku вы можете настроить приложение для работы в Postgres.