我有从远程服务器获取生产数据库等的 rake 任务。它总是相同的任务,但每个项目的服务器信息都会发生变化。我在这里有代码:https : //gist.github.com/868423 在最后一个任务中,我收到了 @local_db_dir_path = nil 错误。
我不想使用 shell 环境变量,因为我不想在每次使用 rake 或打开新 shell 时都设置它们。
将设置粘贴到 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 签入到服务器本身的实时分支中,以便对其进行版本控制,但我从来没有为此烦恼过。
您应该为此使用 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