2014-06-16 19 views
5

Moja aplikacja heroku ulega awarii, ponieważ nie może znaleźć modułu "SecureRandom". Podaję swoją wersję Ruby w gemfile, a mój komputer, gemfile i Heroku wydają się pasować do numerów wersji Ruby, ale nie numerów łatek.Heroku nie może znaleźć SecureRandom

Inne posty sugerują skierowanie użytkownika usr/bin/heroku do określonego pliku Ruby, ale nie jestem pewien, jak to zrobić (nie mam bin Heroku w mojej aplikacji). To wygląda na błąd w wersji Ruby. Jak mogę to naprawić?

class OrderItem < ActiveRecord::Base 
    require 'SecureRandom' 

    ... 
end 

Heroku dziennika:

/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:229:in `require': No such file to load -- SecureRandom (LoadError) 

Gemfile:

source 'https://rubygems.org' 
ruby '2.0.0' 

Linia komend:

/ $ heroku run ruby -v 
Running `ruby -v` attached to terminal... up, run.9318 
ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux] 

/$ ruby -v 
ruby 2.0.0p451 (2014-02-24 revision 45167) [x86_64-darwin12.5.0] 

góry dzięki.

+0

dlaczego camelize? – apneadiving

+0

Znajdowałem się pod modułami wyświetleń, a klasy zostały zadeklarowane w mieszanym przypadku, jak podano na takich stronach: http://itsignals.cascadia.com.au/?p=7. Ale najwyraźniej nie uwzględnia się ich w mieszanym przypadku, ponieważ rozwiązało to problem. Dziękuję Ci! – steel

+0

pliki są zawsze małe, klasy zawsze są wielbłądami – apneadiving

Odpowiedz

11

Rzeczywistą nazwą jest securerandom, wszystkie małe litery. Systemy plików Linux są zwykle rozróżniane wielkości liter.

więc zmienić wymagać:

require 'securerandom' 
+1

Powinniśmy szanować fakt: wielbłądy uwielbiają wielbłądami – apneadiving

+0

To się udało, dziękuję! Wygląda na to, że Heroku jest na Linuksie, podczas gdy ja jestem lokalnie na Uniksie, więc może dlatego nie udało mi się, gdy go popchnąłem. Jakieś pomysły, dlaczego moduły są zadeklarowane jako małe i małe litery? – steel

+1

Nazwy klas i modułów w ruby ​​powinny zawsze być zadeklarowane w przypadku wielbłądów, ale nie wymaga się klasy, wymagany jest plik, w którym klasa jest zadeklarowana. Rzeczywista nazwa pliku powinna być "secure_random", ale z jakiegoś powodu zdecydowali się użyć [securerandom] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html) . –