【问题标题】:Rails - Access file sitting in different portRails - 访问位于不同端口的文件
【发布时间】:2012-11-08 19:26:43
【问题描述】:

我有两个 Web 服务器实例。一个在 3000 端口上运行,一个在 9090 上运行。我想访问位于 9090 端口中的 JSON 文件。

在 Rails 模型中,我可以在使用时正常访问 JSON 文件

stream = open("http://localhost:9090/file.json")

但我想做的更像是

stream = open(":9090/file.json") # OUTPUT: No such file or directory - :9090/file.json

我想避免对 URL 进行硬编码(显然),如果我还想避免将“域”从 Rails 控制器传递到 Rails 模型。

或者是否有一个包可以处理访问不同的端口,如果 openURI 不这样做?

谢谢!

【问题讨论】:

  • 有没有办法为您的open 方法添加选项?类似open("url", :port => 9090)
  • 我用的是 Ruby 的 openURI,好像没有……ruby-doc.org/stdlib-1.9.3/libdoc/open-uri/rdoc/OpenURI.html
  • 为什么不想从控制器中传递呢?您可以在初始化模型实例时设置它并将其存储在实例变量中......我认为它足够干净
  • Intrepidd 的解决方案看起来不错,但我开始想,也许我会从控制器中传入变量...!
  • 如果您的应用程序可以从多个域访问(例如每个国家一个域...),从控制器获取它比在 yaml 中设置更容易

标签: ruby-on-rails open-uri


【解决方案1】:

您可以创建一个全局 CONFIG 变量,例如,它将加载 config/config.yml 的内容。

您可以在初始化程序中加载此文件,这是我的:

if !defined? CONFIG
  CONFIG = YAML.load_file(File.join(Rails.root, "config", "config.yml"))[Rails.env] rescue []
end

然后在你的模型中:

stream = open("#{CONFIG['url']}:9090/file.json")

假设您的 config.yml 看起来像这样:

development:
  url: http://localhost

production:
  url: http://what.ever

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2013-09-03
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2017-07-18
    相关资源
    最近更新 更多