我的 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 文件干净是个好主意,我试图将上面的代码移动到配置下的 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_utilities 中 self 的值是 Main。所以我明白为什么我会收到命名空间方法错误。此问题的修复方法是什么?
最佳答案
在您的 config/deploy.rb
中,尝试使用 load
而不是 require
。此外,capistrano 已经像您在 RAILS_ROOT
中一样运行,因此无需使用 __FILE__
:
load "lib/capistrano_utilities"
在 capistrano 配置文件中,load
被重新定义为将另一个配置文件加载到当前配置中。当向它传递一个路径时,它实际上调用了 load_from_file
(由 capistrano 定义的私有(private)方法),它只是从磁盘读取文件并 instance_eval
是它。
关于ruby-on-rails - Capistrano:deploy.rb 文件重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888670/