当前位置: 首页 > 知识库问答 >
问题:

如何在ruby aws lambda函数中要求本地项目库?

甘永春
2023-03-14

我有一个ruby lambda函数,现在它需要使用mysql2连接数据库

现在,使用lambda函数控制台编辑器,我上传了我的zip文件和供应商/捆绑包中的库。

我使用下面的命令在我的本地安装了库

捆绑包安装——路径供应商/捆绑包

安装mysql2~

现在,我写了下面的代码来从数据库获取数据

require 'json'
load_paths = Dir.pwd + "/vendor/bundle/ruby/2.5.0/gems/**/lib"
$LOAD_PATH.unshift(*load_paths)
require 'mysql2'
def lambda_handler()
  @db_host  = "host"
  @db_user  = "user"
  @db_pass  = "pass"
  @db_name = "db"

  client = Mysql2::Client.new(:host => @db_host, :username => @db_user, :password => @db_pass, :database => @db_name)
  @cdr_result = client.query("SELECT count(*) from names")
  puts @cdr_result
  { statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end
lambda_handler

但是在aws lambda中抛出这个错误

Response:
{
  "errorMessage": "cannot load such file -- mysql2",
  "errorType": "Init<LoadError>",
  "stackTrace": [
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/task/replaceFile.rb:4:in `<top (required)>'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'"
  ]
}

是否有任何方法可以要求将本地目录mysql2 gem放入我的脚本文件中,其中包含我的gem在供应商/bundle中,并在我的ruby脚本中使用这些库,该脚本位于aws lambda部署包中。

共有1个答案

邓浩漫
2023-03-14

显然,其他答案不适用于Ruby 2.7.0。

这对我来说很管用

$LOAD_PATH.unshift *Dir['/var/task/app_name/vendor/ruby/2.7.0/gems/**/lib']

确保将app_name更改为lambda函数的名称。

 类似资料:
  • 问题内容: 我不想在Maven存储库(本地/远程)中安装几个jar。特别是我有一些jar文件位于 使用NetBeans打开/编辑时如何将它们包括到我的项目中? 问题答案: 您是否考虑过将这两个JAR添加为依赖项?例如, 请注意,不建议这样做,如果有的话,应该非常谨慎地使用它。

  • 您好,我在Azure门户中创建了一个函数并看到队列数据出队。 我在我的计算机上安装了一个CLI,当我运行项目时,它将显示一个func。exe命令提示符。我在local.settings.json中添加了如下连接字符串: 当我在门户中向队列中添加消息时,应用程序未收到该消息。我需要更新哪些其他设置。

  • 问题内容: 我有一个使用node.js express开发的移动应用程序后端。我尝试将其部署为lambda服务。为此,我创建了一个无服务器框架项目(https://github.com/serverless)。以前,我通过启动快速后端应用程序在本地测试了移动应用程序。现在,我找不到没有本地后端就可以在本地测试我的移动应用程序的方法。命令只在我调用一次后运行。 有什么方法可以将lambda函数作为W

  • 我正在用NodeJS和ExpressJS建立一个区块链客户端-服务器网络。我让服务器成功运行,区块链自己运行。但是我在两者结合上遇到了一些问题。首先,这是我的项目结构: 实际的问题,我有,我想包括在文件,但我总是得到上线,我包含到: 我已经尝试了以下变体,但是它们都产生了相同的错误(非常预期,因为要求目录是相对于文件调用要求的,但是我还是尝试了它们,以防万一): 这是: 其次,: 最后,: 我甚至

  • 问题内容: 我在一个项目中有一些代码,想在另一个项目中重用。我需要做什么(在两个文件夹中)才能执行此操作? 目录结构类似于: oo 项目1 file1.py file2.py 酒吧 项目2 fileX.py fileY.py 我想使用fileX.py和fileY.py中的file1.py和file2.py中的函数。 问题答案: 理想情况下,两个项目都是可安装的python程序包,并充满__init

  • 我有点困惑如何处理Web项目中的本地设置,对于我们的Azure函数来说,这似乎很琐碎,我们使用local.settings.json,然后我们使用下面的ConfigurationBuilder来处理本地与Azure配置设置 这对我们的函数很有效,这样它就可以读取本地开发的本地设置和我们发布到的任何环境的Azure设置。 但在我的网络项目中,没有本地的。设置。那么我该如何处理同样的情况呢? 我看了a