Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails资产管道Rails.application.assets.instance#variable_get(';@environment';)返回零_Ruby On Rails_Asset Pipeline_Assets - Fatal编程技术网

Ruby on rails Rails资产管道Rails.application.assets.instance#variable_get(';@environment';)返回零

Ruby on rails Rails资产管道Rails.application.assets.instance#variable_get(';@environment';)返回零,ruby-on-rails,asset-pipeline,assets,Ruby On Rails,Asset Pipeline,Assets,我正在尝试动态编译javascript,然后将其添加到Sprocket存储中,以使其可用。我研究的每个地方都建议使用以下代码来注册javascript: env = Rails.application.assets.is_a?(Sprockets::Index) ? Rails.application.assets.instance_variable_get('@environment') : Rails.application Rails.application.config.assets.

我正在尝试动态编译javascript,然后将其添加到Sprocket存储中,以使其可用。我研究的每个地方都建议使用以下代码来注册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\u variable\u get(“@environment”)
总是返回nil,我有什么地方做错了吗?还是应该添加其他内容?

Rails.application.assets本身就是Sprocket::Environment的一个实例 @environment'是资产清单的一个变量,属于Rails.application,如下所示:

Rails.application.instance_variable_get('@assets_manifest')。instance_variable_get('@environment')

我在RAILS 3.2.15中遇到了类似的问题, 但它是Rails.application.assets返回零
quiet\u assets.rb:4:in
':未定义的方法
logger='用于nil:NilClass(NoMethodError)

发布的行是
Rails.application.assets.logger=logger.new('logger.log')

我回到Rails控制台,发现Rails.application.assets刚刚返回了nil

我通过以下步骤解决此问题:

  • 在你的gem文件中包括两个gem,以防你没有它。 宝石“链轮” gem“链轮轨道”

  • 查找导致问题的文件,并初始化资产对象。 您也可以将其放在application.rb中,在我的例子中,在我引用logger之前,我将其放在config/initializers/quiet_assets.rb中

    添加此行:

    Rails.application.assets=Sprockets::Environment.new

    在这一行之前:

    Rails.application.assets.logger=logger.new('logger.log')

  • 在application.rb中,请记住已激活资产管道。
    config.assets.enabled=true

  • 对于生产,您可能需要设置config.assets.compile=true

  • 希望这有助于自己构建它(新版本需要)


    有人能回答吗?天才投掷庆祝五彩纸屑>
    env = Sprockets::Railtie.build_environment(Rails.application)