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

打包Git Gem以部署到Ruby Lambda运行时

蒙化
2023-03-14

我正在构建一个Ruby 2.7 Lambda应用程序。

我的应用程序依赖于github中存在的gem。

gem 'my-gem', git: 'https://github.com/my-org/my-gem', branch: 'main'

我想编写一个脚本,可以构建包含此依赖项的部署zip文件。

当我运行bundle install时,我的gem安装到供应商/bundle/ruby/2.7.0/bundler/gems/my-gem-GITHASH。

对于Lambda包装,我认为我需要构造以下内容

  • 供应商/bundle/ruby/2.7.0/gems/my-gem-1.0.0/*(ruby代码)

下面的脚本操作可以组装这个结构,但我希望我有一个更简单的方法。

    cd vendor/bundle/ruby/2.7.0/bundler/gems/my-gem-* 
    # build the git gem (*.gem)
    gem build 
    # copy the gem and the gemspec to the vendor/bundle/ruby/2.7.0 directories
    cp *.gem ../../../gems 
    cp *.gemspec ../../../specifications/my-gem-1.0.0.gemspec 
    # upack the .gem file in the proper directory
    cd ../../../gems 
    gem unpack *.gem 
    # return to the working directory
    cd ../../../../.. 
    # Zip the dependencies 
    zip -r deploy.zip \
           vendor/bundle/ruby/2.7.0/gems \
           vendor/bundle/ruby/2.7.0/specifications \
           vendor/bundle/ruby/2.7.0/extensions \
           lib

我很想找到一个更简单的方法来解决这个问题。

共有2个答案

夔桐
2023-03-14

另一种解决方案是将bundler/gems路径添加到$LOAD_PATH,如下所示:

load_paths = Dir['./vendor/bundle/ruby/2.7.0/bundler/gems/**/lib']
$LOAD_PATH.unshift(*load_paths)

(在lambda_function.rb的最顶端)

墨宜人
2023-03-14

运行bundle install--部署应该执行您想要的操作(留档页面)。

更新:AWS文档似乎使用bundle install--path供应商/bundle

 类似资料:
  • 看完前面的文档,你会发现使用 Blade 开发Web应用是简单的、快速的,当然也功归于约定。 我们使用 Maven 构建项目,打包同时也可以用它,如果你对 Maven 插件熟悉的话可能也用过了, 当然没用过也没关系,你只需要按照下面的操作配置一下即可。 打包工程 添加插件 <build> <finalName>hello</finalName> <plugins>

  • 打包 直接使用下面命令,就可以把vue项目打包: $ npm run build 如下: siwei@siwei-linux:/workspace/test_vue_0613$ npm run build > test_vue_0613@1.0.0 build /workspace/test_vue_0613 > node build/build.js ⠦ building for prod

  • Spring和Spring Boot都支持maven和Gradle通用打包管理技术。 Spring Boot相对Spring的一些优点: 提供嵌入式容器支持; 使用命令java -jar独立运行jar; 部署时可以灵活指定配置文件; 最近项目是分布式的项目,都是通过分项目打包部署,然后部署在docker中运行。

  • 当我将Ignite Client打包到jar并包含在war文件中时,在下面的stacktrace中遇到了这个问题。然后将此war文件部署到WebLogic中。 但是,当通过war文件访问它时,并且通过web服务访问时,出现了上述错误(在war文件中包含的jar内启动了Ignite客户端)。尝试使用Java Serializable和Binarylizable,但仍然遇到这个问题。有一种感觉是因为包

  • 二进制运行 git clone https://github.com/apache/shardingsphere-ui.git; 运行 mvn clean install -Prelease; 获取安装包 /shardingsphere-ui/shardingsphere-ui-distribution/target/apache-shardingsphere-${latest.release.v

  • 部署启动 执行以下命令,编译生成 ShardingSphere-Scaling 二进制包: git clone https://github.com/apache/shardingsphere.git; cd shardingsphere; mvn clean install -Prelease; 发布包所在目录为:/shardingsphere-distribution/shardingsp