【问题标题】:bundle install --without production remediates error, but why? ( Make sure that `gem install pg -v '0.18.1'` succeeds before bundling)bundle install --without production 修复错误,但是为什么呢? (在捆绑之前确保 `gem install pg -v '0.18.1'` 成功)
【发布时间】:2015-06-23 23:36:05
【问题描述】:

在创建 Ruby on Rails 框架后(在推送到 master 和 Heroku 之前)并运行:bundle install,我有时会遇到以下错误:

安装 pg (0.18.2) 时出错,Bundler 无法继续 在捆绑之前确保gem install pg -v '0.18.2' 成功。

以下命令完全解决了这个问题:bundle install --without production

为什么上述命令可以解决问题?据我了解,该命令绕过生产环境 gem 进行部署;那么,我的理解是否正确,为什么必须如此?谢谢!

这是我的 gemfile

source 'https://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.0'
# Use sqlite3 as the database for Active Record
# gem 'sqlite3'
# Use SCSS for stylesheets  
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc

# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :production do
  gem 'pg'
  gem 'rails_12factor'
end

group :development do
  gem 'sqlite3'
end

gem 'bootstrap-sass'

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
   gem 'byebug'

  # Access an IRB console on exception pages or by using <%= console %> in views
   gem 'web-console', '~> 2.0'

  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
   gem 'spring'
  end

【问题讨论】:

    标签: ruby-on-rails ruby postgresql sqlite gem


    【解决方案1】:

    Michael Hartl's Ruby on Rails Tutorial 似乎如此解释了回答这个问题的“为什么”部分的最佳资源:

    "Heroku 使用的是 PostgreSQL 数据库...这意味着我们需要在生产环境中添加 pg gem 以让 Rails 与 Postgres 对话...一般来说,开发和生产环境是一个好主意尽可能相互匹配,包括使用相同的数据库,但我们将在本地使用 SQLite,在生产中使用 PostgreSQL。”

    因此,基本上看来,问题在于维护两个不同环境(生产和开发(本地))之间的约定,更具体地说,是数据库类型(Postgres vs SQLite),即为什么需要bundle install --without production

    “为了准备系统部署到生产环境,我们使用特殊标志运行 bundle install 以防止本地安装任何生产 gem(在本例中由 ph 和 rails_12factor 组成)...因为添加的唯一 gem 是仅限于生产环境,目前这个命令实际上并没有安装任何额外的本地 gem,但需要使用 pg 和 rails_12factor gem 更新 Gemfile.lock。"

    如果 Heroku 部署的补救措施bundle install --without productionbundle install 的可接受替代方案,那么这似乎太糟糕了,难以置信;如果是这样,我是否可以修改其他设置或文件以实现与常规 bundle install 相同的结果?谢谢!

    【讨论】:

    • 在我昨天第一次首次推送到 Heroku 之后,bundle install 现在影响 gemfile 添加。
    • 虽然这个stack overflow question提供了相同的解决方案,但问题略有不同——值得一游。
    • 另一个 stack overflow question 解释捆绑器识别 PostgreSQL 服务器路径的问题。
    猜你喜欢
    • 2015-07-21
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多