当我在部署到vps时尝试在capistrano任务中运行Rails.cache.clear时未初始化的常量Rails?

时间:2016-03-15 11:40:37

标签: ruby-on-rails capistrano

我试图运行

Rails.cache.clear
当我将我的应用程序部署到服务器时,通过Capistrano任务

。 这是我的代码

namespace :deploy do
    desc 'Clear memcache'
    task :clear_memcache do
      on roles(:app) , in: :sequence, wait: 2 do
        Rails.cache.clear
        CACHE.flush
      end
    end

    before :starting,     :check_revision
    after  :finishing,    :compile_assets
    after  :finishing,    :cleanup
    after  :finishing,    :copy_missing_css
    after  :finishing,    :clear_cache
    after  :finishing,    :clear_memcache
    after  :finishing,    :restart
end

但我得到了这个错误。

The deploy has failed with an error: #<NameError: uninitialized constant Rails>

我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的Capistrano任务不是rails应用程序 - 其中Rails不存在。即使它确实如此,这是在执行部署的机器上执行的代码,而不是您的服务器(并且memcached不应该是外部可用的)

您想要的是在服务器上运行某些内容(使用execute方法),或通过为您调用执行的runnerrake等帮助程序。这使用bin/rails runner来执行代码

within release_path do
  with rails_env: fetch(:rails_env) do
    runner "Rails.cache.clear"
  end
end

您还可以创建一个rake任务并通过execute调用它。另外,您只需要运行一次 - 它不需要在所有服务器上重复运行。