Ваша непосредственная проблема в том, что вы создаете недопустимый SQL для PostgreSQL:
SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC
Ваш ORDER BY не соответствует остальной части вашего запроса. Вы не можете использовать столбец в сгруппированном запросе, если этот столбец также не сгруппирован или если столбец присутствует в статистической функции, это то, что означает сообщение об ошибке. Причина в том, что PostgreSQL не будет знать, какую строку created_at
использовать, когда группа строк объединяется предложением GROUP BY; некоторые базы данных будут просто молча выбирать строку самостоятельно, PostgreSQL предпочитает быть строгим и хочет, чтобы вы удалили неоднозначность самостоятельно.
Попробуйте указать порядок самостоятельно:
@categories = Micropost.select("category").group("category").order("category")
Другой вариант - использовать DISTINCT вместо GROUP BY, чтобы избежать дублирования:
@categories = Micropost.select('DISTINCT(category)')
Кстати, вы действительно не должны делать подобные вещи в представлении, вы можете захотеть перенести это на свой контроллер.
Ваша настоящая проблема заключается в том, что вы разрабатываете поверх одной базы данных, а развертываете на другой. Я бы рекомендовал вам переключить среду разработки на PostgreSQL 8.3 (если вы развертываете в общую базу данных Heroku) или PostgreSQL 9.0 (если вы развертываете в выделенную базу данных).