将值从Capistrano deploy.rb文件传递到app

时间:2012-11-26 20:20:41

标签: ruby configuration sinatra capistrano

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

有这样的效果:

配置/ deploy.rb:

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

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

def get_callback_url
   ???
end

我正在使用Sinatra。

2 个答案:

答案 0 :(得分:2)

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

从deploy.rb

设置
run "export CALLBACK_URL=#{callback_url}"

来自app:

def get_callback_url
    ENV['CALLBACK_URL']
end

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

答案 1 :(得分: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环境,所以你应该找到一种方法来分离共享配置。