从 git 引用 ruby​​ gem 会破坏 aws beanstalk 部署

Posted

技术标签:

【中文标题】从 git 引用 ruby​​ gem 会破坏 aws beanstalk 部署【英文标题】:referencing a ruby gem from git breaks aws beanstalk deployment 【发布时间】:2014-09-07 01:23:41 【问题描述】:

我已成功设置我的 aws 环境。但是我有一个问题。在我的 Gemfile 我有以下行:

gem 'activeadmin', :github => 'gregbell/active_admin'

当我执行git aws.push 时,我可以在 aws 日志中看到以下错误:

/usr/local/share/ruby/gems/2.0/gems/bundler-1.3.5/lib/bundler/source/git.rb:177:in `rescue in load_spec_files': git://github.com/gregbell/active_admin.git (at master) is not checked out. Please run `bundle install` (Bundler::GitError)

我可以通过创建这个文件来解决这个问题:.ebextensions/ruby.config

option_settings:
  - option_name: BUNDLE_DISABLE_SHARED_GEMS
    value: "1"
  - option_name: BUNDLE_PATH
    value: "vendor/bundle"

packages:
  yum:
    git: []

这会将所有内容打包到供应商/捆绑包中,并且我的应用程序会启动正确。

但是这种方法有两个问题:

    部署需要很长时间,因为每次都需要安装所有的gem

    当我 ssh 进入 EC2 实例时,我不再能够执行命令。例如,我必须启动一个 rpush 守护进程。在本地,这适用于 bundle exec rpush development,但在 EC2 上会导致:

    捆绑执行 rpush /usr/local/share/ruby/gems/2.0/gems/bundler-1.3.5/lib/bundler.rb:284:警告:不安全的世界可写目录 /var/app/current/vendor/bundle/bin 在 PATH,模式 040777 git://github.com/gregbell/active_admin.git (在主人)没有签出。请运行捆绑安装

是否有其他方法可以正确安装 gems 并同时使用系统 gems?或者如果这不可能,我如何在捆绑宝石时启动rpush

【问题讨论】:

类似于***.com/questions/13642171/… 在那里查看一些答案。 【参考方案1】:

在本地环境中更新您的 Gemfile.lock (bundle install&& bundle update)。并使用 Gemfile 和 Gemfile.lock 推送提交。再次部署到 AWS。

【讨论】:

有或没有 BUNDLE_DISABLE_SHARED_GEMS? 我从来没有“碰过” BUNDLE_DISABLE_SHARED_GEMS 参数,但在我的项目中默认是BUNDLE_DISABLE_SHARED_GEMS: '1' 您使用的是Passenger还是Unicorn? 那没有帮助,仍然抱怨 active_admin 没有被检出...我使用 puma 网络服务器(64 位 Amazon Linux 2014.03 v1.0.5 运行 Ruby 2.0 (Puma)) 要放弃结帐中的问题,请尝试使用gem 'activeadmin', github: 'gregbell/active_admin'【参考方案2】:

您能否检查在您的 Gemfile 中使用 gem 'activeadmin', 'git://github.com:gregbell/active_admin' 是否适合您?

您还可以按照此处提供的说明使用供应商/缓存来加快部署速度: http://blogs.aws.amazon.com/application-management/post/Tx2XVRWSS4E971S/Locally-Packaging-Gem-Dependencies-for-Ruby-Applications-in-Elastic-Beanstalk

【讨论】:

gem 'activeadmin', 'git://github.com:gregbell/active_admin' 结果为Illformed requirement ["git://github.com:gregbell/active_admin"] (Gem::Requirement::BadRequirementError)【参考方案3】:

什么解决了我的问题:我修改了捆绑安装脚本并添加了 --deployment 标志

【讨论】:

以上是关于从 git 引用 ruby​​ gem 会破坏 aws beanstalk 部署的主要内容,如果未能解决你的问题,请参考以下文章

在Rails应用程序中启动Ruby Gem版本控制

如何使用Rugged ruby gem拉出git存储库

/usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.5.3/lib/cocoapods/command.rb:118:in `git_version'

是否可以“重新推送”在 ruby​​gems.org 上以相同版本发布的 yanked 版本 gem?

Weechat Ruby 插件 - 尝试要求任何 gem 会导致错误

ruby 当Jekyll构建完成时,向OS X通知中心发布消息。需要TerminalNotifier,请参阅http://git.io/5X99Eg或“gem