Почему Пассажир говорит, что мой драгоценный камень 'json' не может быть найден, когда мой список драгоценностей показывает это?
Я получил следующее сообщение об ошибке с phusion passenger для Ruby on Rails на моем сервере Apache:
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)
Это странно, потому что, когда я выполняю команду списка драгоценных камней:
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
Так что нет других наборов гемов кроме глобального.
Это мой Gemfile:
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 install --without developement test
команда. Я не хочу, чтобы Capistrano выполнял какую-либо установку пакета сервера. Таким образом, я неиспользованные драгоценные камни, такие как capistrano-rvm или capisttrano-rails.
В чем дело? Что я должен делать?
=== Редактировать
Если я захожу в папку с моим приложением и проверяю, есть ли в нем 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
2 ответа
Я решил это. Проблема исходила от строки переводчика пассажира Phusion.
Поскольку Phusion passenger больше не является жемчужиной, а пакетом, apt-get установит пакет зависимости: старый версионный пакет ruby
Таким образом, даже когда я установил единственную версию ruby с RVM (ruby 2.1.0), Phusion Passenger использовал ту (1.9.3), которая поставлялась в пакете в / usr / bin / ruby, и поэтому Passenger каким-то образом искал драгоценные камни в эта папка переводчика. Конечно, он не мог найти необходимые драгоценные камни, потому что они были установлены в соответствии с ruby 2.1.0, а не с ruby 1.9.3.
Выполнение rvm gemset list
Команда покажет вам, какой набор гемов в настоящее время используется, но, к сожалению, мы не можем предположить, что когда мы устанавливаем гемы, они попадают внутрь текущего набора гемов. Это сложнее и неяснее, чем это. Кажется, расположение папки, в которую вы устанавливаете свои драгоценные камни, имеет значение. Кроме того, драгоценные камни, отображаемые gem list
Команда почти бесполезна для устранения проблем с драгоценными камнями. Установка среды ruby на сервере - это действительно боль....
Страница развертывания веб-сайта, посвященного комплектации, объясняет это немного. Я никогда не нашел хорошего и подробного объяснения того, как гемами управляют rvm и bundler.
Чтобы решить проблему, мне пришлось выполнить следующую команду
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
и я меняю переменную: passenger_ruby
в файле nginx.conf
на значение "Использовать в Nginx". Это сработало отлично.