1

在 Capistrano 的 deploy.rb 文件中,我设置了不同的环境,例如服务器名称、端口等。我还要求用户向另一台服务器发送回调,该服务器也在 deploy.rb 中定义。如何干净利落地将此值传递给我的应用程序?

有这样的效果:

配置/部署.rb:

set :callback_url, "http://somecallbackurl.com:12345/bla"

应用程序/控制器/myapp.rb:

def get_callback_url
   ???
end

我正在使用 Sinatra。

4

2 回答 2

2

我找到了一个解决方案,那就是使用环境变量。

从 deploy.rb 设置它

run "export CALLBACK_URL=#{callback_url}"

从应用程序:

def get_callback_url
    ENV['CALLBACK_URL']
end

我不会说这是最干净的解决方案,但它确实有效。

于 2012-11-27T00:12:52.170 回答
0

我可能会建议使用共享的 YAML 文件来存储这种配置,并单独加载它。例如,有一个名为类似 的文件config/settings.yml,其中包含以下内容:

:callback_url: "http://somecallbackurl.com:12345/bla"

config/deploy.rb中,您可以:

settings = YAML.load_file('config/settings.yml')
set :callback_url, settings[:callback_url]

在 中config/initializers/settings.rb,您可以:

settings = YAML.load_file('config/settings.yml')
CALLBACK_URL = settings[:callback_url]

最后,在 中app/controllers/myapp.rb,您将执行以下操作:

def get_callback_url
   CALLBACK_URL
end

使用共享 YAML 文件只是我想到的第一件事。另一种方法是在 ruby​​ 文件中定义一些常量,并在初始化程序和deploy.rb. 基本思想是你并不真的希望你的应用程序依赖于你的 capistrano 环境,所以你应该找到一种方法来分离共享配置。

于 2012-11-26T20:27:45.790 回答