gpt4 book ai didi

ruby-on-rails - Rails Assets 管道 Rails.application.assets.instance_variable_get ('@environment' ) 返回 nil

转载 作者:行者123 更新时间:2023-12-04 03:36:05 25 4
gpt4 key购买 nike

我正在尝试动态编译 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')总是返回零,我做错了什么吗?还是我应该添加其他东西?

最佳答案

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 返回 nilquiet_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 “链轮”
    gem “链轮 rails ”
  • 找到导致问题的文件,并初始化您的 Assets 对象。
    你也可以把它放在 application.rb 中,在我的例子中,我把它放在 config/initializers/quiet_assets.rb 中,然后再提到记录器。

    添加这一行:
    Rails.application.assets = Sprockets::Environment.new
    在此发布行之前:
    Rails.application.assets.logger = Logger.new('logger.log')
  • 在 application.rb 中,记住激活 Assets 管道。config.assets.enabled = true
  • 对于生产,您可能需要设置 config.assets.compile = true

  • 希望这有帮助

    关于ruby-on-rails - Rails Assets 管道 Rails.application.assets.instance_variable_get ('@environment' ) 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353788/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com