我在配置 Sinatra 以使用 Bundler 时遇到问题。我对应该在哪里安装 Gems 感到困惑?我都读过 this question还有这个documentation .
我的 Gemfile
看起来像:
source "http://rubygems.org"
gem "sinatra"
gem "amazon-ec2"
我的 config.ru
看起来像:
require "rubygems"
require "bundler"
Bundler.setup
require "application"
run Sinatra::Application
我的 application.rb
看起来像:
require "rubygems"
require "sinatra"
require "AWS"
#... rest of application
现在,当我运行 bundle install
时,一切正常,Gems 安装到我主目录的 ~/.bundle/
中。然而,在我的应用程序中,如果我查看 .bundle/config
它会显示:
---
BUNDLE_WITHOUT: ""
BUNDLE_PATH: vendor/gems
果然,当我启动应用程序(顺便使用 Passenger)时,它说:
Could not find gem 'amazon-ec2 (>= 0, runtime)' in the gems available on this machine. (Bundler::GemNotFound)
很明显,bundle install
将 Gems 安装在 Sinatra 期望的不同位置。这是否意味着我必须使用 bundle install vendor
或重新配置其他东西,以便应用程序期望 Gems 位于 ~/.bundle
中?
最佳答案
在@aaronrussell 首次发帖大约一年后,我在 Passenger、Nginx、Bundler、Sinatra 上遇到了同样的问题。我通过在生产环境中运行它来解决这个问题:
bundle install --deployment
bundle 的 gem 进入./vendor/bundle
以下是关于 bundler deployment mode 的一些详细信息
关于ruby - Sinatra、Bundler 和 BUNDLE_PATH 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3435033/