2012-02-05 3 views
3

Я развертываю приложение Rails на Heroku (Cedar), и было 3 варианта предварительной компиляции моих активов, которые я мог выбрать, и я выбрал вариант, где Heroku прекомпилирует мои активы при развертывании.Как сделать «активы: прекомпилировать» НЕ загружать базу данных? (Rails)

Когда я нажал, я получил сообщение об ошибке, что он не может получить доступ к моей базе данных (во время предварительной компиляции). Итак, как заставить Rails не подключаться к базе данных во время предварительной компиляции? Я не знаю, почему он установлен в первую очередь, потому что я не могу представить себе сценарий, в котором прекомпиляция потребует доступа к базе данных.

я видел где-то решение, чтобы отключить инициализации приложения на прекомпиляции, что достигается за счет добавления следующего в application.rb (установив его в средах/production.rb не работает):

config.assets.initialize_on_precompile = false 

Я попытался добавить эту строку, и она работает, но я не знаю, является ли это хорошим решением. Разве это не сделает некоторые плагины, которые вы потенциально могли бы использовать для того, чтобы активы не загружались во время предварительной компиляции, что повлияло на конечный результат?

ответ

0

Если вы включите Heroku Labs (http://devcenter.heroku.com/articles/labs-user-env-compile), вы можете иметь доступ к своему Db во время развертывания, который отлично работает.

Вы используете Devise? Это, как правило, является преступником для доступа к БД при предварительной компиляции активов.

+0

Нет, я не использую Разрабатывают. Спасибо за предложение, но я хочу решить его, отключив доступ к базе данных, потому что мне это не нужно. Кроме того, если я узнаю, как это сделать, возможно, я также узнаю, как изменить некоторые другие вещи о прекомпиляции, что будет действительно полезным знанием :) –

+0

Я использую CarrierWave. Считаете ли вы, что это может иметь какое-то отношение к этому? –

+0

... но я согласен, так как это намного лучшее решение, чем я видел до сих пор :) –

1

Что вы делаете, это правильный путь. Если вы не используете модели/что-либо еще, которые фактически обращаются к базе данных в ваших активах, вам это не нужно. Единственный раз, когда вы должны были бы быть ваше приложение инициализируется, если вы делаете что-то вроде этого: (Полностью надуманный пример, но вы можете увидеть, что я клоню)

/* In some css file */ 
.some_class{ 
    #{User.find(1).avatar_url} 
} 
Смежные вопросы