Ruby on rails 3.2 为什么乘客说我的gem';json';can';当我的宝石清单显示它时,它就找不到了?

Ruby on rails 3.2 为什么乘客说我的gem';json';can';当我的宝石清单显示它时,它就找不到了?,ruby-on-rails-3.2,rvm,passenger,gemset,Ruby On Rails 3.2,Rvm,Passenger,Gemset,在Apache服务器上,我收到了针对Ruby on Rails的phusion passenger的以下错误消息: It looks like Bundler could not find a gem. This is probably because your application is being run under a different environment than it's supposed to. Please check the following: * Is this

在Apache服务器上,我收到了针对Ruby on Rails的phusion passenger的以下错误消息:

It looks like Bundler could not find a gem. This is probably because your
application is being run under a different environment than it's supposed to.
Please check the following:

 * Is this app supposed to be run as the `rvm_admin` user?
 * Is this app being run on the correct Ruby interpreter? Below you will
   see which Ruby interpreter Phusion Passenger attempted to use.
 * Are you using RVM? Please check whether the correct gemset is being used.
 * If all of the above fails, try resetting your RVM gemsets:
   https://github.com/phusion/passenger/wiki/Resetting-RVM-gemsets

-------- The exception is as follows: -------
Could not find json-1.8.1 in any of the sources (Bundler::GemNotFound)
这很奇怪,因为当我执行gem list命令时:

rvm_admin@myserver:~$ gem list

*** LOCAL GEMS ***

actionmailer (3.2.16)
actionpack (3.2.16)
activemodel (3.2.16)
activerecord (3.2.16)
activeresource (3.2.16)
activesupport (3.2.16)
annotate (2.6.1)
arel (3.0.3)
atomic (1.1.14)
bcrypt-ruby (3.1.2)
bigdecimal (1.2.3)
builder (3.0.4)
bundler (1.5.2)
capistrano (3.0.1)
chunky_png (1.2.9)
coffee-rails (3.2.1)
coffee-script (2.2.0)
coffee-script-source (1.7.0)
compass (0.12.2)
compass-rails (1.1.3)
declarative_authorization (0.5.7)
devise (3.2.2)
diff-lcs (1.2.5)
erubis (2.7.0)
execjs (2.0.2)
faker (1.2.0)
fssm (0.2.10)
haml (4.0.5)
haml-rails (0.4)
hike (1.2.3)
i18n (0.6.9)
io-console (0.4.2)
journey (1.0.4)
jquery-rails (3.1.0)
json (1.8.1)
libv8 (3.16.14.3 x86_64-linux)
mail (2.5.4)
mime-types (1.25.1)
minitest (4.7.5)
multi_json (1.8.4)
net-scp (1.1.2)
net-ssh (2.7.0)
orm_adapter (0.5.0)
pg (0.17.1)
polyamorous (0.6.4)
polyglot (0.3.3)
psych (2.0.2)
rack (1.4.5)
rack-cache (1.2)
rack-ssl (1.3.3)
rack-test (0.6.2)
rails (3.2.16)
rails-translate-routes (0.1.3)
railties (3.2.16)
rake (10.1.1, 10.1.0)
rdoc (4.1.0, 3.12.2)
ref (1.0.5)
role_model (0.8.1)
rspec-core (2.14.7)
rspec-expectations (2.14.4)
rspec-mocks (2.14.4)
rspec-rails (2.14.1)
ruby-ole (1.2.11.7)
sass (3.2.14)
sass-rails (3.2.6)
schema_plus (1.3.2)
spreadsheet (0.9.6)
sprockets (2.2.2)
squeel (1.1.1)
sshkit (1.0.0)
term-ansicolor (1.2.2)
test-unit (2.1.0.0)
therubyracer (0.12.0)
thor (0.18.1)
thread_safe (0.1.3)
tilt (1.4.1)
timeliness (0.3.7)
tins (0.13.1)
treetop (1.4.15)
tzinfo (0.3.38)
uglifier (2.4.0)
validates_timeliness (3.0.14)
valuable (0.9.8)
warden (1.2.3)
json似乎就在那里

但是如果我做了一个

rvm_admin@myserver:~$ bundle show json
Could not locate Gemfile
为什么呢

有关信息,请参见我的宝石:

rvm_admin@myserver:~$ rvm gemset list

gemsets for ruby-2.1.0 (found in /usr/local/rvm/gems/ruby-2.1.0)
=> (default)
   global
source 'https://rubygems.org'
gem 'rails', '~>3.2'
gem 'pg', '>= 0.14'
gem 'haml-rails' , '>= 0.3'
gem 'execjs'
gem 'therubyracer', :platforms => :ruby

group :development, :test do
  gem 'factory_girl_rails'
end

group :developpement do
  gem 'rspec-rails', '~> 2.11'
  gem 'capistrano', '~> 3.0.1'
  gem 'faker', '>= 1.0'
  gem 'sshkit', '~> 1.0.0'
end

group :test do
  gem 'rspec', '>= 2.11'
  gem 'webrat', '>= 0.7'
  gem 'spork-rails', '>= 3.2'
end

group :assets do
  gem 'sass-rails',   '>= 3.2.3'
  gem 'coffee-rails', '>= 3.2.1'
  gem 'compass-rails', '>= 1.0'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'annotate'
gem 'spreadsheet' #, '~> 0.7'
gem 'schema_plus' #, :git => "git://github.com/lomba/schema_plus.git"
gem 'squeel' #, '~> 1.0'
gem 'devise' #, '~> 2.1'
gem 'role_model'
gem 'declarative_authorization'
gem 'rails-translate-routes'  #, '~> 0.1'
gem 'validates_timeliness'  #, '~> 3.0'
因此,除了全球宝石外,没有其他宝石

这是我的Gemfile

rvm_admin@myserver:~$ rvm gemset list

gemsets for ruby-2.1.0 (found in /usr/local/rvm/gems/ruby-2.1.0)
=> (default)
   global
source 'https://rubygems.org'
gem 'rails', '~>3.2'
gem 'pg', '>= 0.14'
gem 'haml-rails' , '>= 0.3'
gem 'execjs'
gem 'therubyracer', :platforms => :ruby

group :development, :test do
  gem 'factory_girl_rails'
end

group :developpement do
  gem 'rspec-rails', '~> 2.11'
  gem 'capistrano', '~> 3.0.1'
  gem 'faker', '>= 1.0'
  gem 'sshkit', '~> 1.0.0'
end

group :test do
  gem 'rspec', '>= 2.11'
  gem 'webrat', '>= 0.7'
  gem 'spork-rails', '>= 3.2'
end

group :assets do
  gem 'sass-rails',   '>= 3.2.3'
  gem 'coffee-rails', '>= 3.2.1'
  gem 'compass-rails', '>= 1.0'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'annotate'
gem 'spreadsheet' #, '~> 0.7'
gem 'schema_plus' #, :git => "git://github.com/lomba/schema_plus.git"
gem 'squeel' #, '~> 1.0'
gem 'devise' #, '~> 2.1'
gem 'role_model'
gem 'declarative_authorization'
gem 'rails-translate-routes'  #, '~> 0.1'
gem 'validates_timeliness'  #, '~> 3.0'
我使用
bundle安装(不使用development test
命令)手动安装gems。 我不希望Capistrano执行任何类型的服务器包安装。所以我未安装的宝石,如capistrano rvm或capistrano rails

怎么了?我该怎么办

==编辑

如果我进入我的应用程序文件夹并选中fo Json,它似乎存在:

rvm_admin@myserver:/var/www/odpf/current$ bundle show json
The gem json has been deleted. It was installed at:
/usr/local/rvm/rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/gems/json-1.8.1
我解决了这个问题。 问题来自Phusion解释器字符串

由于Phusion passenger不再是一个gem,而是一个现在的包,apt get将安装一个depency包:一个旧版本的ruby包

因此,即使我安装了一个带有RVM的ruby版本(ruby 2.1.0),Phusion Passenger也使用了在/usr/bin/ruby包中提供的版本(1.9.3),因此Passenger不知何故在这个解释器文件夹中寻找gem。当然,他找不到所需的gems,因为它们是与ruby 2.1.0而不是ruby 1.9.3一起安装的

执行
rvm gemset list
命令将向您显示当前使用的gemset,但不幸的是,我们无法做出这样的假设:当我们安装gems时,它们会进入当前gemset。 它比这更复杂、更模糊。看来安装gems的文件夹位置很重要。 此外,
gem list
命令显示的gem对于解决gems问题几乎毫无用处。在服务器上安装ruby Environment真是一件痛苦的事

Deployment页面对此有一点解释。我从未找到一个关于rvm和bundler如何管理gems的好的详细解释

为了解决这个问题,我必须执行以下命令

passenger-config --ruby-command
输出给了我“ruby解释器命令”来复制并粘贴到我的 /etc/apache2/sites available/mysite apache配置文件:

PassengerRuby /usr/local/rvm/gems/ruby-2.1.0/wrappers/ruby
但是,我将其放在配置文件的全局部分的PassengerDefaultRuby参数中,以确保任何ruby助手工具都使用此版本,并且仅使用此版本的ruby 2.1.0:

PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.0/wrappers/ruby
有关如何设置ruby解释器字符串的更多信息,请参见“RVM辅助工具”一节


我强烈建议您阅读它。

我在使用ubuntu 14.04和nginx时,发现了以下错误:

在任何源中都找不到json-1.8.1(Bundler::GemNotFound)

因此,我运行命令:

$ passenger-config --ruby-command

我将文件
nginx.conf
中的变量:
passenger\u ruby
的值更改为“touse in nginx”。它工作得很好。

您是否尝试过在gem文件中包含
gem'json'
?(修改GEM文件后再次运行
bundle install
)是的,我使用bundle install
——未进行开发
测试,问题仍然存在。此外,如果我尝试从我的应用程序文件夹中卸载json gem,它会说:gem“json”无法卸载,因为它是默认的gem。这是一个很大的帮助——我在rvm global gemset中安装passenger时遇到了类似的问题,但我的rails应用程序是从它自己的gemset运行的。乘客似乎最终搜索到了全球的一切