2016-03-15 58 views
1

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

Rails.cache.clear 

当我将应用程序部署到服务器。 这是我的代码

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> 

我该如何解决这个问题?

谢谢!

+0

你应该尝试:: Rails的绝对参考这个模块,或者你需要使用require'rails'来解决这个问题。 –

+0

我该如何使用:: Rails? – user3403614

+0

:: Rails.cache.clear –

回答

0

您的Capistrano任务不是导轨应用程序 - 在他们的内部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。另外,您只需要运行一次 - 它不需要在所有服务器上重复。

相关问题