Проблемы с Heroku и Datamapper - PullRequest
3 голосов
/ 27 июня 2011

Я могу запустить базовое приложение на Heroku, отображая сообщение с помощью get '/' ... работает отлично.Тем не менее, всякий раз, когда я пытаюсь добавить sqlite с помощью datamapper, это не работает.

Чтобы увидеть структуру моего приложения, проверьте проект на github .Я держал код довольно голым.

В журнале от heroku я получаю:

2011-06-26T21:28:36+00:00 app[web.1]: /app/.bundle/gems/ruby/1.9.1/gems/dm-core-1.1.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-postgres-adapter (LoadError)

Дело в том, что я не использую postgres, поэтомуЯ запутался, почему он так говорит.

Ответы [ 3 ]

9 голосов
/ 27 июня 2011

"Дело в том, что я не использую postgres, поэтому я не понимаю, почему он так говорит."

Вы используете Heroku, поэтому вы являетесь используя Postgresql.

В вашем app.rb есть строка:

DataMapper::setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/notes.db")

, которую, я полагаю, вы получили из документации базы данных Heroku .Эта строка в основном говорит: «проверьте переменную среды« DATABASE_URL »и, если она установлена, используйте ее в качестве URL базы данных, в противном случае используйте Sqlite url».При локальном запуске эта переменная среды не будет установлена, поэтому вы будете использовать URL-адрес Sqlite, но в Heroku это будет примерно так (см. Ссылку, указанную выше):

postgres://username:password@hostname/database

Datamapper увидитчто это URL-адрес Postgresql, и попробуйте запросить адаптер postgres, который не установлен, что приведет к появившейся ошибке.

Лучшее решение - установить Postgresql локально, чтобы ваша разработкаи производственные среды настолько похожи, насколько это возможно.Если вы не можете этого сделать или не хотите, вы можете указать адаптер Sqlite локально и адаптер Postgres в работе.В вашем Gemfile это будет выглядеть примерно так:

group :development do
  gem 'dm-sqlite-adapter'
end

group :production do
  gem 'dm-postgres-adapter'
end

Если вы сделаете это, вам нужно будет указать Heroku, какие группы следует исключить при установке драгоценных камней, см. Документы Heroku Gem Bunder..

2 голосов
/ 27 июня 2011

Heroku поддерживает только файловую систему только для чтения (или, по крайней мере, поддерживает только операции чтения для любых файлов, которые вы хотите сохранить).Следовательно, вы не можете использовать SQLite на Heroku.Heroku поддерживает только PostgreSQL в качестве базы данных, поэтому вам необходимо настроить DataMapper для использования PostgreSQL (см. И еще один ответ Geek ).

Я бы рекомендовал установить PostgreSQL в вашемсреда разработки, если вы планируете развертывание в Heroku.Каждая база данных немного отличается, и никакая ORM не защитит вас от различий.Немного поиска вопросов с тегами heroku и postgresql должно показать некоторые проблемы, которые у вас возникнут, если вы будете разрабатывать поверх одной базы данных, но развернетесь на другой.

2 голосов
/ 27 июня 2011

Вы переходите от sqlite к postgres-sql, и поэтому вы должны включить dm-postgres-adapter в свой Gemfile (и установить его, конечно).

...