在Heroku上部署需要application.rb中的config.assets.initialize_on_precompile=false。从Rails Guide中可以看出,这“部分加载了你的应用程序”。
所以我想知道在编译后的资源(例如*.js.erb)中设置一些常量的最佳实践是什么?当这个标志设置为false时,我不能使用在initailizers中设置的任何东西。我不太清楚加载了应用程序的哪些部分,以及如何在执行编译步骤之前设置任何常量、变量等。
谢谢!
发布于 2012-05-17 23:01:45
我遇到了类似的情况,幸运的是我可以很容易地解决它。我知道config.assets.initi....是按照heroku文档的要求在heroku上执行的。在此之前,我只需要手动加载我的初始化器文件。我只想要一个/config/initializers/settings.rb文件,所以我添加了一个require。这就解决了这个问题。
...
#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
...发布于 2013-03-29 16:44:58
这是我能想到的最干净的解决方案
somejavascriptfile.js.erb
<%
# 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发布于 2012-01-25 14:29:40
我对资产管道比较陌生,所以我对最佳实践不太确定。然而,我想到的一个解决方案是添加一个依赖于资产的rake任务:预编译。不过,我不太确定taks会做什么。我想象的实现并不是很漂亮。
您可能需要创建模板文件,比如您的rake任务将复制到*.js.erb文件中的*.js.erb.template,并对文件内容执行某种gsub操作,以便用常量值替换一些占位符。
希望其他人有更好的方法。
https://stackoverflow.com/questions/8951496
复制相似问题