To, co zaczęło się jako niewielkie rozdrażnienie, zmieniło się teraz w ból głowy. Buduję aplikację Rails 4 i używam Foremana do konfiguracji dev z plikami Procfile i .env do konfiguracji. Po ustawieniu zmiennej ENV w pliku .env jest ona poprawnie pobierana przez moją aplikację. W tym przypadku ustawiam niektóre opcje ENV dla Paperclip w inicjalizatorze.Dlaczego moje inicjatory Rails buforują zmienne ENV w konsoli (Foreman, Dev env)
Problem pojawia się, gdy idę, aby zmienić wartość zmiennych ENV. W konsoli, jeśli wpiszę ENV ["MY_VAR"], pokazuje nową wartość. Jednak wartość użyta w moim inicjalizatorze, która prawdopodobnie została uruchomiona po uruchomieniu konsoli, pokazuje starą wartość! W moim projekcie nigdzie nie ma starej wartości. To prowadzi mnie do przekonania, że środowisko jest w jakiś sposób buforowane lub że zmienne env są eksportowane do mojej powłoki. Kończy mi się miejsc, aby wyglądać, więc każda pomoc będzie bardzo doceniona! Pracuję na komputerze Mac (10.9.4) z Ruby 1.9.3-p374 i Rails 4.1.0.
przykład:
korzenie/.env
S3_BUCKET=mybucket
konfiguracji/inicjalizatory/paperclip.rb
Paperclip::Attachment.default_options[:s3_credentials] = {bucket: ENV["S3_BUCKET"]}
Jeśli zmienić wartość S3_BUCKET do "newbucket" i uruchom „nadzorca uruchom konsole c "lub" szyny c ", aby wejść do konsoli, tak się dzieje:
ENV["S3_BUCKET"] # => "newbucket"
Paperclip::Attachment.default_options[:s3_credentials] # => {bucket: 'mybucket'}
Należy wspomnieć, że to zachowanie występuje również w moich klasach, które wprowadziłem/lib. Wyobrażam sobie, że to wszystko z powodu czegoś głupiego, którego przeoczyłem. Jakieś pomysły?
Jeśli zmienisz swoje env vars i chcesz, aby aplikacja je odebrała, musisz ponownie uruchomić aplikację. Tak było zawsze. – nzifnab
Tak, oczywiście. Jednak, aby wyjaśnić, PO ponownym uruchomieniu aplikacji, zmiany nie są odbierane w inicjalizatorów, ale są one pobierane w hash ENV. – Spencer
Czy używasz 'spring' przez przypadek? (Sprawdź swoją Gemfile.) – fny