#ruby-on-rails #ruby #postgresql #sqlite #heroku
#ruby-on-rails #ruby #postgresql #sqlite #heroku
Вопрос:
После трех вечеров работы над этой проблемой и прочтения всех сообщений об этом, я должен наконец задать этот вопрос!
Я хочу развернуть самое простое приложение Rails для Heroku:
rails new test_appli
cd test_appli
git init
git add .
git commit -m "initial commit"
heroku create
git push heroku master
Все в порядке, приложение хорошо работает на Heroku. После этого я создам базу данных SQLite3:
rails generate scaffold User name:string email:string
rake db:migrate
На локальном компьютере все в порядке. Я localhost:3000/users
хорошо вижу. Затем я хочу поместить базу данных на Heroku. Сначала я изменяю свой Gemfile:
group :production do
gem 'pg'
end
group :development, :test do
gem 'sqlite3'
end
Затем я отправляю все это на Heroku:
git init
git add .
git commit -m "with Database"
git push heroku master
heroku rake db:migrate
Тогда в пакете нет ошибок, все в порядке, база данных отправлена, но страница heroku.com/users
выдает ошибку
Rails 500: «Мы сожалеем, но что-то пошло не так»
Я больше не знаю, что делать. Вы можете мне помочь?
Комментарии:
1. вы проверили свой файл журнала с помощью
heroku logs
из терминала?2. конечно, это ничего не говорило… ответ ниже. Спасибо
Ответ №1:
Я подозреваю, что вы пытаетесь развернуть приложение Rails 3.1 в стеке bamboo (heroku create по умолчанию использует стек bamboo 1.9.2 и не запускает Rails 3.1 из коробки.). Стек Cedar намного лучше подходит для сайтов Rails 3.1 —
попробуйте
heroku create --stack cedar
при создании вашего приложения на Heroku и повторной загрузке его. Также обратите внимание, что ваша команда rake в Heroku станет
heroku run rake db:migrate
Ответ №2:
Выполните:
heroku запускает rake db:schema:load
У меня была такая же проблема. У меня это работает после того, как git нажимает heroku master
Ответ №3:
Не выполняйте инициализацию git во втором наборе команд — вам нужно инициализировать ваше репозиторий Git только один раз.
В остальном все выглядит нормально — вы где-нибудь видите какие-нибудь ошибки?
Комментарии:
1. Спасибо за вашу помощь. Проблема заключалась в версии rails со стеком. В rails 3 используется только stack cedar!
Ответ №4:
Почему вы используете pg
gem в своей рабочей группе, а sqlite3
gem в своей группе разработки? Мне кажется, ваша проблема, скорее всего, связана с тем фактом, что вы разрабатываете базу данных, отличную от используемой в производственной среде. На вашем месте я бы придерживался одного, который значительно упростил бы отладку.
Если вы действительно хотите запустить приложение как можно скорее, просто запустите его в рабочей среде с помощью sqlite… Gemfile:
gem 'rails'
gem 'sqlite3'
Кроме того, быстрый способ выяснить, в чем заключается ошибка, — это выполнить ее heroku logs
из консоли unix.
Комментарии:
1. Привет, Heroku не может запустить sqlite3, но преобразовать DB в pg. Вы должны сделать это подобным образом в файле gemfile. Проблема заключалась в версии rails со стеком. В rails 3 используется только stack cedar!
2. На самом деле, Heroku может запускать sqlite3. У меня запущено приложение rails3 на Heroku, которое использует sqlite3. Мы используем этот стек: bamboo-ree-1.8.7.
Ответ №5:
Какая версия Rails? Можете ли вы попробовать создать приложение, работающее на Cedar stack?
heroku create myapp --stack cedar
Учитывая, что приложение запущено на cedar, вам нужно немного изменить команды, например:
heroku run rake db:migrate
В любом случае вам действительно нужно проверить свои журналы, потому что ваша проблема может быть связана даже не с базой данных, а с активами.
Ответ №6:
Добавлен ли у вас общий экземпляр базы данных heroku объемом 5 МБ? Когда вы создаете свое приложение heroku (на cedar), необязательно автоматически создается база данных.
airlift:projects $ heroku create --stack cedar testapp9
Creating testapp9... done, stack is cedar
http://testapp9.herokuapp.com/ | git@heroku.com:testapp9.git
airlift:projects $ heroku addons --app testapp9
logging:basic
releases:basic
Когда вы просматриваете конфигурацию heroku, вы ничего не получаете:
heroku config
airlift:projects $ heroku config --app testapp9
airlift:projects $
Чтобы добавить базу данных:
дополнения heroku: добавить общую базу данных: 5 мб
airlift:projects $ heroku addons:add shared-database:5mb --app testapp9
-----> Adding shared-database:5mb to testapp9... done, v3 (free)
airlift:projects $ heroku config
No app specified.
Run this command from an app folder or specify which app to use with --app <app name>
airlift:projects $ heroku config --app testapp9
DATABASE_URL => postgres://blah:blah@blah.compute-1.amazonaws.com/blah
SHARED_DATABASE_URL => postgres://blah:blah@blah.compute-1.amazonaws.com/blah
airlift:projects $
Тогда вы сможете перенести свою базу данных.
Комментарии:
1. Здравствуйте, большое спасибо за вашу помощь. На самом деле, как сказал Джон Бейнон, мне пришлось перенести это в cedar stack только из-за версии rails. Это работает так! Но я действительно ценю вашу помощь! Спасибо
Ответ №7:
Привет, @ redronin спасибо, что помог мне найти способ подключиться к моей базе данных postgres на Heroku, однако, как новичку в Heroku и postgresql, мне пришлось перепроектировать, что такое «бла». Итак, я полагаю, что я бы разбил это, чтобы помочь другим, как вы помогли мне.
postgres://[пользователь]: [пароль] @[имя_сервера].compute-1.amazonaws.com /[база данных]