【问题标题】:Rails.cache.clear fails with undefined method `clear' for nil:NilClass when running in a rake task在 rake 任务中运行时,Rails.cache.clear 因 nil:NilClass 的未定义方法“clear”而失败
【发布时间】:2014-04-24 21:03:24
【问题描述】:

在运行该 rake 任务时关注instructions to create a rake task to clear the cache,

namespace :cache do
  desc "Clears Rails cache"
  task :clear do
    Rails.cache.clear
  end
end

并使用以下命令运行该 rake 任务:

rake cache:clear

我收到一个错误:

undefined method `clear' for nil:NilClass

从 rails 控制台运行 Rails.cache.clear 时,它成功地清除了缓存而没有错误。为什么在 rake 任务中 Rails 对象上缓存 nil,但在 rails 控制台中没有?

注意:我使用的是 dalli 和 memcache。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 memcached


    【解决方案1】:

    回答为什么需要=> :environment?

    :environment 是由 rails 定义的任务。 当您需要与应用程序模型交互、执行数据库查询等时,您的自定义任务应该依赖于environment 任务,因为它将加载您的 Rails 应用程序代码。

    Rails.cache 如果您的应用程序未加载,将返回 nil。 因此,错误undefined method 'clear' for nil:NilClass

    您需要在自定义 clear 任务之前运行 environment 任务。

    namespace :cache do
      desc "Clears Rails cache"
      task :clear => :environment do  ## This will run environment task first and then clear task
        Rails.cache.clear
      end
    end
    

    【讨论】:

      【解决方案2】:

      想通了。我错过了 => :environment after :clear

      以下工作:

      namespace :cache do
        desc "Clears Rails cache"
        task :clear => :environment do
          Rails.cache.clear
        end
      end
      

      为什么需要 => :environment?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多