Ruby on rails Capistrano:deploy.rb文件重构
我的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
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的细节。