Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 Capistrano:deploy.rb文件重构_Ruby On Rails_Ruby_Capistrano - Fatal编程技术网

Ruby on rails Capistrano:deploy.rb文件重构

Ruby on rails Capistrano:deploy.rb文件重构,ruby-on-rails,ruby,capistrano,Ruby On Rails,Ruby,Capistrano,我的deploy.rb中有以下代码 namespace :app do desc "copies the configuration frile from ~/shared/config/*.yml to ~/config" task :copy_config_files,:roles => :app do run "cp -fv #{deploy_to}/shared/config/hoptoad.rb #{release_path}/config/initializer

我的deploy.rb中有以下代码

namespace :app do
  desc "copies the configuration frile from ~/shared/config/*.yml to ~/config"
  task :copy_config_files,:roles => :app do
    run "cp -fv #{deploy_to}/shared/config/hoptoad.rb #{release_path}/config/initializers"
    run "cp -fv #{deploy_to}/shared/config/app_config.yml #{release_path}/config/app_config.yml"
  end
end
我认为保持deploy.rb文件干净是个好主意,我尝试将上面的代码移到config下的capistrano_utilities.rb。我正在使用Rails应用程序。我在deploy.rb中添加了以下代码行

require File.expand_path(File.dirname(__FILE__) + "/../lib/capistrano_utilities")
现在我得到以下错误

undefined method `namespace' for main:Object (NoMethodError)

deploy.rb中self的值是Capistrano::Configuration。而capistrano_实用程序中的自我价值是主要的。所以我理解了为什么会出现名称空间方法错误。此问题的解决方法是什么?

配置/deploy.rb
中,尝试
加载
而不是
要求
。此外,capistrano已经像您在
RAILS\u根目录下运行一样运行,因此无需使用
\uuu文件\uuuu

load "lib/capistrano_utilities"

在capistrano配置文件中,
load
被重新定义为将另一个配置文件加载到当前配置中。当向它传递路径时,它实际上调用了
load\u from\u file
(由capistrano定义的私有方法),该方法只从磁盘读取文件并
实例\u eval

在Rails.root上检查您的Capfile。 如果你使用Capistrano3,你会看到这一行


Dir.glob('lib/capistrano/tasks/*.cap')。每个{r | import r}


现在,将文件放在“lib/capistrano/tasks/capistrano_utilities.cap”上,它将被加载。

I尽管require和load之间的唯一区别是其中一个将文件重新读取到内存中多次,而另一个只读取一次。你能解释一下为什么load有效而require无效吗?罗杰,更多关于capistrano的细节。