【问题标题】:When i run a bundle install to a sinatra app, gems are not found当我将捆绑安装运行到 sinatra 应用程序时,找不到 gem
【发布时间】:2016-11-26 02:40:10
【问题描述】:

我是 sinatra 的新手,我不是 rvm 和 rbenv 等 ruby​​ 管理工具的专家,我遇到以下问题:当我在我的应用程序中运行捆绑安装时,gems 已安装并且我有以下响应“捆绑的 gem 安装在 ./vendor/bundle 中。”但是当我尝试运行我的 sinatra 应用程序时,它显示我没有安装 sinatra,当我尝试这个命令行“gem list”时,我也没有找到它。

我正在使用 rbenv,但我不知道如何解决这个问题。当我像“gem install sinatra”一样通过gem安装gem时,它工作正常,但真的很痛苦,所以我的问题是如何解决这个问题?

PS:我试图用 rvm 管理我的 ruby​​ 管理器,但我遇到了问题,所以我搬到了 rbenv,也许这就是安装 gems 的路径

这是我的 gem 环境的打印:

RubyGems Environment:
 - RUBYGEMS VERSION: 2.5.1
 - RUBY VERSION: 2.3.1 (2016-04-26 patchlevel 112) [x86_64-darwin15]
 - INSTALLATION DIRECTORY:      /Users/laadhari/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0
 - USER INSTALLATION DIRECTORY: /Users/laadhari/.gem/ruby/2.3.0
 - RUBY EXECUTABLE: /Users/laadhari/.rbenv/versions/2.3.1/bin/ruby
 - EXECUTABLE DIRECTORY: /Users/laadhari/.rbenv/versions/2.3.1/bin
 - SPEC CACHE DIRECTORY: /Users/laadhari/.gem/specs
 - SYSTEM CONFIGURATION DIRECTORY:    /Users/laadhari/.rbenv/versions/2.3.1/etc
 - RUBYGEMS PLATFORMS:
 - ruby
 - x86_64-darwin-15
 - GEM PATHS:
  - /Users/laadhari/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0
  - /Users/laadhari/.gem/ruby/2.3.0
 - GEM CONFIGURATION:
  - :update_sources => true
  - :verbose => true
  - :backtrace => false
  - :bulk_threshold => 1000
 - REMOTE SOURCES:
  - https://rubygems.org/
 - SHELL PATH:
  - /Users/laadhari/.rbenv/versions/2.3.1/bin
  - /usr/local/Cellar/rbenv/1.0.0/libexec
  - /Users/laadhari/.rbenv/shims
  - /usr/local/bin
  - /usr/bin
  - /bin
  - /usr/sbin
  - /sbin

我的 Gemfile 的打印件

source 'https://rubygems.org'

gem 'sinatra', '~> 1.4.7'
gem "sinatra-activerecord"
gem 'mysql2'
gem 'rest-client'
gem 'thin'
gem 'rake'

当我跑步时:

gem list

*** LOCAL GEMS ***
...

成功运行 bundle install 后,我在本地 gems 中找不到 Gemfile 中的 gems...

【问题讨论】:

  • 嗨@dzof31!我的回答对你有帮助吗?

标签: ruby sinatra bundler rbenv


【解决方案1】:

Bundler 的目标之一是不污染全球宝石列表。这是通过不将捆绑的 gem 安装到默认位置来实现的。

因此,为了确保您的应用找到捆绑的 gem,您有以下几种选择:

使用bundle exec

启动应用程序时(即使用rackup 或ruby ./app.rb),在命令前加上bundle exec

bundle exec rackup
#=> Thin web server (v1.7.0 codename Dunder Mifflin)
#=> Maximum connections set to 1024
#=> Listening on localhost:9292, CTRL+C to stop
#=> ...

更多信息:https://bundler.io/v1.12/man/bundle-exec.1.html

使用Bundler.setup

在加载依赖项之前(使用 require),加载 Bunder:

require 'rubygems'
require 'bundler/setup'

# require your gems as usual
require 'sinatra'

更多信息:https://bundler.io/v1.12/bundler_setup.html

来源和延伸阅读

我强烈建议阅读https://bundler.io/v1.12/#getting-started 的优秀文档。

还有一件事,要找出捆绑的 gem 的实际安装位​​置,请运行以下命令:

bundle config path
#=> Settings for `path` in order of priority. The top value will be used
#=> Set for your local app (/path/to/project/.bundle/config): ".bundle"

【讨论】:

  • 感谢您的回复!实际上我发现了这个问题,这是由于捆绑程序没有使用 rbenv 中选择的实际 ruby​​ 版本重新散列。所以我的 bundler env 不好,这在​​我运行 bundle install 时导致了问题。感谢您提供不同的链接,他们帮助了解了更多关于它的信息,特别是我现在正在使用的 rackup ;)
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多