首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当config.assets.initialize_on_precompile为false时设置常量

当config.assets.initialize_on_precompile为false时设置常量
EN

Stack Overflow用户
提问于 2012-01-21 15:47:00
回答 3查看 2.7K关注 0票数 3

在Heroku上部署需要application.rb中的config.assets.initialize_on_precompile=false。从Rails Guide中可以看出,这“部分加载了你的应用程序”。

所以我想知道在编译后的资源(例如*.js.erb)中设置一些常量的最佳实践是什么?当这个标志设置为false时,我不能使用在initailizers中设置的任何东西。我不太清楚加载了应用程序的哪些部分,以及如何在执行编译步骤之前设置任何常量、变量等。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2012-05-17 23:01:45

我遇到了类似的情况,幸运的是我可以很容易地解决它。我知道config.assets.initi....是按照heroku文档的要求在heroku上执行的。在此之前,我只需要手动加载我的初始化器文件。我只想要一个/config/initializers/settings.rb文件,所以我添加了一个require。这就解决了这个问题。

代码语言:javascript
复制
...
#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
...
票数 3
EN

Stack Overflow用户

发布于 2013-03-29 16:44:58

这是我能想到的最干净的解决方案

somejavascriptfile.js.erb

代码语言:javascript
复制
<%
  # get around no asset initialization in precompile
  require Rails.root.join('config/initializers/facebook')
%>

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

config/initializers/facebook.rb

代码语言:javascript
复制
module Facebook
  CONFIG = YAML.load(File.open(Rails.root.join('config/facebook.yml')))[Rails.env]
  APP_ID = CONFIG['app_id']
  SECRET = CONFIG['secret']
end
票数 1
EN

Stack Overflow用户

发布于 2012-01-25 14:29:40

我对资产管道比较陌生,所以我对最佳实践不太确定。然而,我想到的一个解决方案是添加一个依赖于资产的rake任务:预编译。不过,我不太确定taks会做什么。我想象的实现并不是很漂亮。

您可能需要创建模板文件,比如您的rake任务将复制到*.js.erb文件中的*.js.erb.template,并对文件内容执行某种gsub操作,以便用常量值替换一些占位符。

希望其他人有更好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8951496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档