我正在尝试动态编译javascript,然后将其添加到sprockets存储中,以便它可用。我研究过的每个地方都建议使用以下代码来注册javascript:
env = Rails.application.assets.is_a?(Sprockets::Index) ? Rails.application.assets.instance_variable_get('@environment') : Rails.application
Rails.application.config.assets.digests[file_name] = env[file_name].digest_path
在制作中,Rails.application.assets.instance_variable_get('@environment')
总是返回nil,有什么我做错了吗?或者我应该添加别的东西?
答案 0 :(得分:5)
Rails.application.assets本身是Sprockets :: Environment的一个实例 @environment'是assets_manifest的变量,属于Rails.application,如下所示:
Rails.application.instance_variable_get('@assets_manifest').instance_variable_get('@environment')
我在RAILS 3.2.15中遇到了类似的问题,
但它是Rails.application.assets返回nil
quiet_assets.rb:4:in
':未定义的方法logger=' for nil:NilClass (NoMethodError)
发行的是
Rails.application.assets.logger = Logger.new('logger.log')
我回到Rails控制台,发现Rails.application.assets刚刚返回nil。
我通过这一步解决了这个问题:
在您的Gemfile中包含两个gem,以防您没有它。 宝石'链轮' gem'sprockets-rails'
找到导致问题的文件,并初始化您的资产对象。 你也可以把它放在application.rb中,在我的情况下,我把它放在config / initializers / quiet_assets.rb中,然后再引用logger。
添加以下行:
Rails.application.assets = Sprockets::Environment.new
在此发布行之前:
Rails.application.assets.logger = Logger.new('logger.log')
,记得要激活资产管道。
config.assets.enabled = true
用于制作,您可能需要设置config.assets.compile = true
希望这有所帮助
答案 1 :(得分:0)
自己构建(新版本需要)
env = Sprockets::Railtie.build_environment(Rails.application)