установка констант, когда config.assets.initialize_on_precompile имеет значение false - PullRequest
3 голосов
/ 21 января 2012

Для развертывания на Heroku требуется config.assets.initialize_on_precompile=false в application.rb.Из Rails Guide говорится, что это "частично загружает ваше приложение".

Итак, мне было интересно, каковы наилучшие методы установки некоторых констант для использования в скомпилированных ресурсах (например, * .js.erb)?Если для этого флага установлено значение false, я не могу использовать ничего, установленное в initailizer.Я не очень ясно, какие части приложения загружаются, и как я мог бы установить любые константы, переменные и т. Д. Перед выполнением шага компиляции.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 17 мая 2012

Я столкнулся с подобной ситуацией, к счастью, я смог это легко исправить.Я знал, что config.assets.initi.... казнили на героку, как просят герои документов.Я просто должен был вручную загрузить файлы инициализации до этого.Я хотел только один /config/initializers/settings.rb файл, поэтому добавил для этого требование.И это решило проблему.

...
#at the end of the /config/application.rb file
require Rails.root.join("config/initializers/settings") #this is not loaded automatically in the assets:precompile task, that's why we need this
config.assets.initialize_on_precompile = false
...
1 голос
/ 29 марта 2013

Вот самое чистое решение, которое я мог придумать

somejavascriptfile.js.erb * * 1004

<%
  # get around no asset initialization in precompile
  require Rails.root.join('config/initializers/facebook')
%>

console.log('<%= Facebook::APP_ID %>');

config/initializers/facebook.rb

module Facebook
  CONFIG = YAML.load(File.open(Rails.root.join('config/facebook.yml')))[Rails.env]
  APP_ID = CONFIG['app_id']
  SECRET = CONFIG['secret']
end
0 голосов
/ 25 января 2012

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

Возможно, вам придется создавать файлы шаблонов, например * .js.erb.template, чтобы ваша задача rake копировала в файлы * .js.erb и выполняла какую-то gsub для содержимого файла, чтобы заменить некоторые заполнители на константы значения.

Надеюсь, у кого-то есть лучший метод ...

...