ruby-on-rails - Capistrano:deploy.rb 文件重构

标签 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/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/

相关文章:

javascript - 通过 JavaScript 函数调用时,Rails 部分未呈现

ruby-on-rails - Gmaps4rails : zoom not working?

ruby-on-rails - 如何在谷歌地图中制作半径圆?

ruby-on-rails - Sidekiq 和 rails 4 actionmailer 从不发送电子邮件

ruby - 在 Formtastic 选择中显示选项标签的额外属性

sql - Rails 中的批量更新而不使用 update_all 和单个查询?

ruby-on-rails - 如何测试自定义验证器?

ruby-on-rails - Redis 与 postgres 冲突 - 错误 'database configuration does not specify adapter'

ruby-on-rails - capistrano 回滚会撤消迁移吗?

ruby-on-rails - capistrano 部署后未加载 css 文件