Ruby on rails 捆绑安装--无需生产就可以修复错误,但为什么?(在绑定之前,确保'gem install pg-v'0.18.1'成功)

Ruby on rails 捆绑安装--无需生产就可以修复错误,但为什么?(在绑定之前,确保'gem install pg-v'0.18.1'成功),ruby-on-rails,ruby,postgresql,sqlite,gem,Ruby On Rails,Ruby,Postgresql,Sqlite,Gem,在推送到master和Heroku并运行:bundle install之前创建Ruby on Rails框架之后,我有时会遇到以下错误: 安装pg 0.18.2时出错,捆绑程序无法继续 在绑定之前,请确保gem安装pg-v“0.18.2”成功 下面的命令完全解决了这个问题:bundle安装-不进行生产 为什么上面提到的命令可以解决这个问题?据我所知,该命令绕过生产环境gems进行部署;那么,我的理解正确吗?为什么必须如此?谢谢大家! 这是我的档案 source 'https://rubygems

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

安装pg 0.18.2时出错,捆绑程序无法继续 在绑定之前,请确保gem安装pg-v“0.18.2”成功

下面的命令完全解决了这个问题:bundle安装-不进行生产

为什么上面提到的命令可以解决这个问题?据我所知,该命令绕过生产环境gems进行部署;那么,我的理解正确吗?为什么必须如此?谢谢大家!

这是我的档案

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

回答此问题的“为什么”部分的最佳资源如下所示:

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

因此,基本上,问题在于维护两个不同环境(本地生产环境和本地开发环境)之间的约定,更具体地说,是数据库类型Postgres vs SQLite,这就是为什么需要捆绑安装,而不需要生产:

为了准备将系统部署到生产环境,我们使用一个特殊标志运行bundle install,以防止本地安装任何生产gems,在这种情况下,这些gems由ph和rails 12factor组成……因为添加的gems仅限于生产环境,现在这个命令实际上并没有安装任何额外的本地gems,但需要用pg和rails_12factor gems更新Gemfile.lock


如果针对Heroku部署捆绑包安装的补救措施(无需生产)是捆绑包安装的可接受替代方案,那么这似乎太糟糕了,不可能是真的;如果是这样的话,我是否可以修改其他设置或文件,以获得与常规捆绑安装相同的效果?谢谢

在我昨天第一次推送到Heroku之后,bundle install now会影响文件添加。虽然这提供了相同的解决方案,但问题略有不同,值得一看。另一个问题解释了bundler识别PostgreSQL server路径的问题。