2012-11-26 39 views
1

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

有得这种效果:

配置/ deploy.rb:

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

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

def get_callback_url 
    ??? 
end 

我使用西纳特拉。

回答

2

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

设置从deploy.rb

run "export CALLBACK_URL=#{callback_url}" 

从应用:

def get_callback_url 
    ENV['CALLBACK_URL'] 
end 

我不会说这是最干净的解决方案,但它的工作原理。

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

+0

嗯......如果我使用另一个文件,它会变得有些复杂。 'callback_url'将在不同的环境中改变。生产可能会说'prod.callbackurl.com',而dev/qa环境指向别的地方。我正在使用capistrano-ext来管理不同的阶段。 – garbagecollector

相关问题