0

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

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

4

2 回答 2

0

将设置粘贴到 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 签入到服务器本身的实时分支中,以便对其进行版本控制,但我从来没有为此烦恼过。

于 2011-03-17T15:38:55.113 回答
0

您应该为此使用 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
于 2011-03-17T11:34:27.343 回答