"неинициализированная константа Etc" при запуске приложения Ruby - PullRequest
1 голос
/ 25 августа 2011

Некоторые приложения на моем сервере, использующие Ruby и Ruby On Rails , похоже, перестали работать.Или хотя бы частично так.Мне удалось заставить веб-интерфейс рассматриваемого приложения снова начать функционировать, переустановив другую часть Ruby.Но больше всего я сломал кое-что еще в процессе.

Мне удалось отследить это с помощью некоторых тестов, и кажется, что Etc каким-то образом не обнаруживается программой при запуске.

Я протестировал

ruby -e 'puts Etc.getpwnam("apache").uid'

и получил

Неинициализированная константа и т. Д.

Если я тестировал вместо

ruby -r etc -e 'puts Etc.getpwnam("apache").uid'

Я получил правильный ответ

48

Он работает на сервере Amahi6 (работает Fedora Core 14 64bit ).

Пример кода, о котором идет речь, в реальном приложении, которое дает сбой:

#!/usr/bin/env ruby
# Amahi Home Server
# Copyright (C) 2007-2010 Amahi
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License v3
# (29 June 2007), as published in the COPYING file.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# file COPYING for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Amahi
# team at http://www.amahi.org/ under "Contact Us."

require File.dirname(__FILE__) + '/../config/boot'
#require 'commands/runner'
require 'optparse'

# switch to apache:users first
uid = Etc.getpwnam("apache").uid
gid = Etc.getgrnam("users").gid
Process.gid = gid
Process.egid = gid
Process.uid = uid
Process.euid = uid
...

, сбой при той же самой неинициализированной

Etc

Пояснение: Я НЕ менял этот код вообще, и он работал в своем текущем состоянии до

Что могло быть, что я напутал?:)

ОБНОВЛЕНИЕ: установлена ​​Ruby версии 1.8.7

ОБНОВЛЕНИЕ 2:

Если я пытаюсь вручную добавить , требуется для rubygems и и т. Д. не удается, но жалуется на другой пакет.Поэтому я думаю, что с ядром моего ruby ​​что-то в корне запутано.

/ usr / lib64 / ruby ​​/ gems / 1.8 / gems / activesupport-2.3.4 / lib / active_support / dependencies.rb: 55: неинициализированная константа ActiveSupport :: Dependencies :: Mutex (NameError) из /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in gem_original_require' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in require 'из / usr / lib64 / ruby ​​/gems / 1.8 / gems / activesupport-2.3.4 / lib / active_support.rb: 56 из /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in gem_original_require' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in require 'из / usr / lib64/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record.rb:25 из /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in gem_original_require' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in require 'from /var / hda / platform / html / script / install-app: 70

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Закончилось тем, что версии рельсов и драгоценных камней были новыми. Понижение до драгоценных камней 1.3.7 и рельсов 2.3.8 .

gem update --system 1.3.7

gem uninstall rails

gem install rails --version 2.3.8
1 голос
/ 25 августа 2011

Кажется, вам не хватает require 'rubygems' и require 'etc' (поместите их ниже require 'optparse')

0 голосов
/ 25 августа 2011

помните о 'rubygems',

командная строка:

ruby -rubygems -e 'puts Etc.getpwnam("apache").uid'

скрипт:

require 'rubygems'
puts Etc.getpwnam("apache").uid
...