【问题标题】:What is the best way to store project specific config info in ruby Rake tasks?在 ruby​​ Rake 任务中存储项目特定配置信息的最佳方式是什么?
【发布时间】:2011-03-16 20:19:14
【问题描述】:

我有从远程服务器获取生产数据库等的 rake 任务。它总是相同的任务,但每个项目的服务器信息都会发生变化。我在这里有代码:https://gist.github.com/868423 在最后一个任务中,我得到一个@local_db_dir_path = nil 错误。

我不想使用 shell 环境变量,因为我不想在每次使用 rake 或打开新 shell 时都设置它们。

【问题讨论】:

  • IRC 上有人建议我使用全局哈希,例如 $config = {:server => 'remote_hostname', :user => 'username' 等... }

标签: ruby rake rakefile


【解决方案1】:

将设置粘贴到 YAML 文件中,然后像这样读取它:

require 'yaml'
config = YAML.load("config.yaml") # or wherever

$remote_host = config['remote_host']
$ssh_username = config['ssh_username']
# and so on

或者你可以只读取一个大的配置哈希:

$config = YAML.load("config.yaml")

请注意,我在这里使用的是全局变量,而不是实例变量,因此不会对变量范围感到惊讶。

config.yaml 将如下所示:

--- 
remote_host: some.host.name
ssh_username: myusername
other_setting: foo
whatever: bar

我倾向于将 config.yaml.sample 与代码的主体一起签入,其中包含示例但我可以复制到非版本化 config.yaml 的所有内容的非工作设置。有些人喜欢将他们的 config.yaml 签入到服务器本身的实时分支中,以便对其进行版本控制,但我从未为此烦恼。

【讨论】:

    【解决方案2】:

    您应该为此使用 capistrano,您可以使用 mulitsage 或仅将主机设置单独用于任务,例如 capistrano 将如下所示:

    task :development do
      server "development.host"
    end
    
    task :backup do
      run "cd #{current_path}; rake db:dump"
      download "remote_path", "local_path"
    end
    

    然后这样称呼它:

    cap development backup
    

    【讨论】:

    • 这与每个项目配置的存储位置正交。
    • 谢谢,我想我可以使用 capistrano 而不是他们的部署任务。对于 PHP 项目,我不需要整个发布/当前目录树,也不需要重新启动 apache。帽子看起来真的很复杂。虽然我用 cap 做 rails 项目,但我正在寻找一些我可以很容易地向 PHP 程序员解释的东西。
    • @Ivanoats capistrano 适合做任何你想做的事情,虽然我发现它非常有用,但不需要使用 current/release,对于数据库迁移,你可以使用这个脚本 stackoverflow.com/questions/5246821/…
    猜你喜欢
    • 1970-01-01
    • 2010-09-11
    • 2018-12-20
    • 2022-01-25
    • 1970-01-01
    • 2017-06-05
    • 2015-11-08
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多