我输入以下命令:
rake -RAILS_ENV=production db:schema:load
在我的生产服务器上的rails应用程序的主目录中,我收到以下错误消息:
rake aborted!
Please install the postgresql adapter: `gem install activerecord-postgresql-adapter` (pg is not part of the bundle. Add it to Gemfile.)
这很奇怪,因为我知道pg在我的Gemfile中:
source 'https://rubygems.org'
gem 'rails', '3.2.8'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
group :development, :production do
gem 'pg'
gem 'devise'
gem 'haml-rails'
gem 'paperclip'
gem 'will_paginate'
end
group :development do
gem 'capistrano'
end
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
当我从该目录运行bundle install
时,我得到以下输出(pg不在其上。):
Fetching gem metadata from https://rubygems.org/.......
Using rake (0.9.2.2)
Using i18n (0.6.1)
Using multi_json (1.3.6)
Using activesupport (3.2.8)
Using builder (3.0.0)
Using activemodel (3.2.8)
Using erubis (2.7.0)
Using journey (1.0.4)
Using rack (1.4.1)
Using rack-cache (1.2)
Using rack-test (0.6.1)
Using hike (1.2.1)
Using tilt (1.3.3)
Using sprockets (2.1.3)
Using actionpack (3.2.8)
Using mime-types (1.19)
Using polyglot (0.3.3)
Using treetop (1.4.10)
Using mail (2.4.4)
Using actionmailer (3.2.8)
Using arel (3.0.2)
Using tzinfo (0.3.33)
Using activerecord (3.2.8)
Using activeresource (3.2.8)
Using cocaine (0.2.1)
Using coffee-script-source (1.3.3)
Using execjs (1.4.0)
Using coffee-script (2.2.0)
Using rack-ssl (1.3.2)
Using json (1.7.5)
Using rdoc (3.12)
Using thor (0.16.0)
Using railties (3.2.8)
Using coffee-rails (3.2.2)
Using orm_adapter (0.4.0)
Using warden (1.2.1)
Using devise (2.1.2)
Using haml (3.1.7)
Using haml-rails (0.3.4)
Using jquery-rails (2.1.1)
Using paperclip (3.1.2)
Using bundler (1.2.1)
Using rails (3.2.8)
Using sass (3.2.1)
Using sass-rails (3.2.5)
Using uglifier (1.2.7)
Using will_paginate (3.0.3)
Your bundle is complete! It was installed into /usr/local/lib
我的Gemfile.lock如果它是相关的(pg仅作为依赖项列出):
GEM
remote: https://rubygems.org/
specs:
actionmailer (3.2.8)
actionpack (= 3.2.8)
mail (~> 2.4.4)
actionpack (3.2.8)
activemodel (= 3.2.8)
activesupport (= 3.2.8)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.4)
rack (~> 1.4.0)
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.1.3)
activemodel (3.2.8)
activesupport (= 3.2.8)
builder (~> 3.0.0)
activerecord (3.2.8)
activemodel (= 3.2.8)
activesupport (= 3.2.8)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.8)
activemodel (= 3.2.8)
activesupport (= 3.2.8)
activesupport (3.2.8)
i18n (~> 0.6)
multi_json (~> 1.0)
arel (3.0.2)
bcrypt-ruby (3.0.1-x86-mingw32)
builder (3.0.0)
capistrano (2.12.0)
highline
net-scp (>= 1.0.0)
net-sftp (>= 2.0.0)
net-ssh (>= 2.0.14)
net-ssh-gateway (>= 1.1.0)
cocaine (0.2.1)
coffee-rails (3.2.2)
coffee-script (>= 2.2.0)
railties (~> 3.2.0)
coffee-script (2.2.0)
coffee-script-source
execjs
coffee-script-source (1.3.3)
devise (2.1.2)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.1)
railties (~> 3.1)
warden (~> 1.2.1)
erubis (2.7.0)
execjs (1.4.0)
multi_json (~> 1.0)
haml (3.1.7)
haml-rails (0.3.4)
actionpack (~> 3.0)
activesupport (~> 3.0)
haml (~> 3.0)
railties (~> 3.0)
highline (1.6.13)
hike (1.2.1)
i18n (0.6.1)
journey (1.0.4)
jquery-rails (2.1.1)
railties (>= 3.1.0, < 5.0)
thor (~> 0.14)
json (1.7.5)
mail (2.4.4)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
mime-types (1.19)
multi_json (1.3.6)
net-scp (1.0.4)
net-ssh (>= 1.99.1)
net-sftp (2.0.5)
net-ssh (>= 2.0.9)
net-ssh (2.5.2)
net-ssh-gateway (1.1.0)
net-ssh (>= 1.99.1)
orm_adapter (0.4.0)
paperclip (3.1.2)
activemodel (>= 3.0.0)
activerecord (>= 3.0.0)
activesupport (>= 3.0.0)
cocaine (>= 0.0.2)
mime-types
pg (0.14.0-x86-mingw32)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.2)
rack (>= 0.4)
rack-ssl (1.3.2)
rack
rack-test (0.6.1)
rack (>= 1.0)
rails (3.2.8)
actionmailer (= 3.2.8)
actionpack (= 3.2.8)
activerecord (= 3.2.8)
activeresource (= 3.2.8)
activesupport (= 3.2.8)
bundler (~> 1.0)
railties (= 3.2.8)
railties (3.2.8)
actionpack (= 3.2.8)
activesupport (= 3.2.8)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
rake (0.9.2.2)
rdoc (3.12)
json (~> 1.4)
sass (3.2.1)
sass-rails (3.2.5)
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
sprockets (2.1.3)
hike (~> 1.2)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
thor (0.16.0)
tilt (1.3.3)
treetop (1.4.10)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.33)
uglifier (1.2.7)
execjs (>= 0.3.0)
multi_json (~> 1.3)
warden (1.2.1)
rack (>= 1.0)
will_paginate (3.0.3)
PLATFORMS
x86-mingw32
DEPENDENCIES
capistrano
coffee-rails (~> 3.2.1)
devise
haml-rails
jquery-rails
paperclip
pg
rails (= 3.2.8)
sass-rails (~> 3.2.3)
uglifier (>= 1.0.3)
will_paginate
.bundle / config的内容:
BUNDLE_FROZEN: '1'
BUNDLE_PATH: /usr/local/lib/
BUNDLE_DISABLE_SHARED_GEMS: '1'
BUNDLE_WITHOUT: development:test
我正在使用 - 栏杆3.2.8 - 红宝石1.9.3 - rvm 1.16.5
有人可以解释为什么捆绑安装没有安装我的Gemfile中列出的所有宝石吗?
答案 0 :(得分:3)
通过一些侦探工作,我发现以下因素导致了我的问题:
1)我在Windows机器上开发,安装了特定于Windows的gem pg版本:(0.14.0-x86-mingw32)。
2)然后将它添加到我的Gemfile.lock中,然后我的repo,然后capistrano用于在Debian盒子上安装我的应用程序; pg仅被列为依赖项。
3)capistrano运行带有“--deployment”标志的bundler,这需要你的Gemfile.lock是最新的和准确的。
如何解决问题是从capistrano中删除了“--deployment”标志,并在deploy.rb中使用以下变量定义:
set :bundle_flags, "--quiet"
require 'bundler/capistrano'
再次运行cap deploy:update
。
仍在努力让Gemfile.lock反映应该在生产环境中安装pg,而pg应该安装在开发机器上,这样我就可以将--deployment选项包含回部署任务中。 / p>
答案 1 :(得分:1)
你必须使用bundler来执行rake:
bundle exec rake db:schema:load RAILS_ENV=production
答案 2 :(得分:1)
对于database.yml
应该是
development:
adapter: postgresql
encoding: utf8
database: xxx
host: localhost
username: username
password: pw
postgresql的适配器是postgresql
对于gem文件,请确保pg在那里 如果在开发和生产中都存在块,则不需要块