在OpenShift Online上执行DNS查找时权限被拒绝

时间:2015-01-24 18:51:45

标签: ruby-on-rails dns openshift

我正在尝试在OpenShift Online上的Rails应用程序中查找DNS记录。不幸的是,这会因Permission denied错误而失败。从日志中:

[App 13739 stdout] I, [2015-01-24T13:37:47.698714 #13739]  INFO -- : Completed 500 Internal Server Error in 25ms
[App 13739 stdout] F, [2015-01-24T13:37:47.811394 #13739] FATAL -- : 
[App 13739 stdout] Errno::EACCES (Permission denied - bind(2)):
[App 13739 stdout]   app/models/user.rb:706:in `block in validate_mail_domain'
[App 13739 stdout]   app/models/user.rb:705:in `validate_mail_domain'

失败的代码是:

  def validate_mail_domain
    begin
      Resolv::DNS.open do |dns|
        dns.getresource(mail.split("@").last, Resolv::DNS::Resource::IN::SOA)
      end
    rescue ArgumentError
      errors.add(:mail, "must be provided")
    rescue Resolv::ResolvError
      errors.add(:mail, "must be valid")
    end
  end

其中第706行是以dns.getresource开头的那个。

(逻辑很简单:存在的域将具有SOA记录。如果没有,则域无效。)

这是非常标准的东西,这里的失败是非常意外的。还有其他方法可以在OpenShift中执行DNS查找吗?

1 个答案:

答案 0 :(得分:1)

由于SELinux限制,您似乎无法对OpenShift进行DNS查找。当您使用SSH进入设备时,可以使用dig进行确认:

$ dig google.com
dig: isc_socket_bind: permission denied

此限制记录在此bug report中,并且链接的OpenShift论坛thread建议您在此期间使用基于Web的外部DNS查找服务作为解决方法。