Как сделать так, чтобы активы: предварительная компиляция НЕ загружала базу данных? (Рельсы)

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

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

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

config.assets.initialize_on_precompile = false

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


person janko-m    schedule 05.02.2012    source источник


Ответы (2)


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

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

person John Beynon    schedule 05.02.2012
comment
Нет, я не пользуюсь Devise. Спасибо за предложение, но я хочу решить это, отключив доступ к базе данных, потому что мне это не нужно. Кроме того, если я узнаю, как это сделать, возможно, я также узнаю, как изменить некоторые другие вещи в прекомпиляции, что будет действительно полезным знанием :) - person janko-m; 06.02.2012
comment
Я использую CarrierWave. Как вы думаете, это может иметь какое-то отношение к этому? - person janko-m; 06.02.2012
comment
... но я соглашусь, так как это намного лучшее решение, чем все, что я видел до сих пор :) - person janko-m; 06.02.2012

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

/* In some css file */
.some_class{
    #{User.find(1).avatar_url}
}
person Mal Curtis    schedule 13.11.2012