在我的Capistrano的deploy.rb文件中,我设置了不同的环境,例如服务器名称,端口等。我还要求用户将回调发送到另一个服务器,也在deploy.rb中定义。如何将此值干净地传递给我的应用程序?
有这样的效果:
配置/ deploy.rb:
set :callback_url, "http://somecallbackurl.com:12345/bla"
应用程序/控制器/ myapp.rb:
def get_callback_url
???
end
我正在使用Sinatra。
答案 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环境,所以你应该找到一种方法来分离共享配置。