You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpalRB中使用OpenSSL?编译代码遇常量未定义报错求解

OpalRB中使用OpenSSL的解决方案

原生Ruby的OpenSSL模块依赖底层C扩展,无法直接通过Opal编译为JavaScript——这就是你遇到uninitialized constant OpenSSL错误的核心原因。不过可以使用Opal生态官方维护的opal-openssl gem,它是基于JavaScript实现的OpenSSL API兼容层,能支持X.509证书解析等常见功能。

具体操作步骤:

  1. 安装opal-openssl gem
    在终端执行:

    gem install opal-openssl
    

    若使用Gemfile管理依赖,添加以下内容后执行bundle install:

    gem 'opal-openssl'
    
  2. 修改Ruby代码
    将原代码中的require 'openssl'替换为require 'opal-openssl',确保Opal加载到兼容层。修改后的完整代码示例:

    require 'opal-openssl'
    
    cert = <<~CERT
    -----BEGIN CERTIFICATE-----
    MIIF0jCCBLqgAwIBAgIQE6uZ3+oqXXc/+5sp3TQd3zANBgkqhkiG9w0BAQsFADB1
    MUQwQgYDVQQDDDtBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9ucyBD
    ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTELMAkGA1UECwwCRzMxEzARBgNVBAoMCkFw
    cGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTIyMTIzMDE1MzIxOVoXDTI1MTIyOTE1
    MzIxOFowga0xGjAYBgoJkiaJk/IsZAEBDApMSDI4WEE3VDIyMUAwPgYDVQQDDDdp
    UGhvbmUgRGlzdHJpYnV0aW9uOiBTdW5zaGluZSBJbnN1cmFuY2UgR3JvdXAgQ28u
    LCBMdGQuMRMwEQYDVQQLDApMSDI4WEE3VDIyMSswKQYDVQQKDCJTdW5zaGluZSBJ
    bnN1cmFuY2UgR3JvdXAgQ28uLCBMdGQuMQswCQYDVQQGEwJDTjCCASIwDQYJKoZI
    hvcNAQEBBQADggEPADCCAQoCggEBAKorSaxSoBNGkikg3M2brfrD4dpWga8oIVIv
    L7oKGpvjjYCY2S6tuNIEZA0cdpTIcQ84j31RAoU6Y6xgyCpvb5c7I28hFVlM4ssR
    fXQ0O/as8aF+TZvQMnDreLOndS6lKpeCitWDKt3cJS0bxjCUxY8A0e0sCNncQJht
    UEcdNaFEVbrsIVD0zuS6ii+UEIBpv8EKdcUKsygFCM/Cc5MJ4QF9Ke+U3VHbgJ1Z
    IhbUpTakj8ZgMD+Djvqkt4WDXU2Qc3aROg3VWNTTTV230efImd/jH6bWGMKv8XtG
    gPwoTzPqFB50LRDg3ghsqH6esTcEWf2olDMJBerBo1NZ1Ec6i3kCAwEAAaOCAiMw
    ggIfMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUCf7AFZD5r2QKkhK5JihjDJfs
    p7IwcAYIKwYBBQUHAQEEZDBiMC0GCCsGAQUFBzAChiFodHRwOi8vY2VydHMuYXBw
    bGUuY29tL3d3ZHJnMy5kZXIwMQYIKwYBBQUHMAGGJWh0dHA6Ly9vY3NwLmFwcGxl
    LmNvbS9vY3NwMDMtd3dkcmczMDEwggEeBgNVHSAEggEVMIIBETCCAQ0GCSqGSIb3
    Y2QFATCB/zCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRp
    ZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRo
    ZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1
    c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGlj
    ZSBzdGF0ZW1lbnRzLjA3BggrBgEFBQcCARYraHR0cHM6Ly93d3cuYXBwbGUuY29t
    L2NlcnRpZmljYXRlYXV0aG9yaXR5LzAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAzAd
    BgNVHQ4EFgQUofgyj62dk2i3I5Xb1b9h7etBc4EwDgYDVR0PAQH/BAQDAgeAMBMG
    CiqGSIb3Y2QGAQQBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQCXbTgmDM+uppd9
    FBdvc6F0pZV03kInxZr1EsiUizpcEYTIghkbw2JIZZ8DvOCdM/Fv4ypJ2SOu2BNr
    xlWBG2JP6Yn8345V3PcfxABMWQUnj9x7EG68sNomJ4URlWD0cgKqz0IU7DsoW+ak
    SIYeh2s5/GNzOMAYuUGEJB/ai/MXCNY24EhwYisKPUR8YKKjb+Wm02DTRkaYVZI8
    kUUTu4lKLTlTB39OYkp+7B/x/QUkopgeRRL4wX5PcI42dolUq2LwcuJXYyN0k9Og
    Wo6ByfM+3ae0UX8YMIhXphEe4QxEzmoROoys9QYm6YMg52XnjcAPEBZ1USeG/e4e
    aboYVMIu
    -----END CERTIFICATE-----
    CERT
    
    x509 = OpenSSL::X509::Certificate.new(cert)
    puts x509.subject.to_s
    
  3. 编译并运行代码
    使用Opal编译命令生成JavaScript文件:

    opal -r opal-openssl your_script.rb > compiled.js
    

    也可直接在浏览器环境中通过Opal加载运行,需确保opal-openssl的代码被正确打包进项目。

注意事项

  • opal-openssl并非完全复刻原生OpenSSL的所有功能,依赖底层C实现的高级特性可能无法支持,但X.509证书解析这类常见场景完全可用。
  • 编译和运行时必须确保opal-openssl被正确引入,否则仍会出现常量未定义的错误。

内容的提问来源于stack exchange,提问作者Jaaziel iSpoofer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:35:54