8

Điều gì bắt đầu như một sự khó chịu nhỏ giờ đây đã trở thành đau đầu. Tôi đang xây dựng một ứng dụng Rails 4 và đang sử dụng Foreman cho thiết lập dev của tôi với một tệp Procfile và .env để cấu hình. Khi tôi đặt biến ENV trong tệp .env, tệp được ứng dụng của tôi chọn chính xác. Trong trường hợp này, tôi đang thiết lập một số tùy chọn ENV cho Paperclip trong bộ khởi tạo.Tại sao bộ khởi tạo Rails của tôi lưu bộ nhớ đệm các biến ENV trong giao diện điều khiển (Foreman, Dev env)

Vấn đề xảy ra khi tôi thay đổi giá trị của các biến ENV. Trong giao diện điều khiển, nếu tôi nhập ENV ["MY_VAR"], nó sẽ hiển thị giá trị mới. Tuy nhiên, giá trị được sử dụng trong bộ khởi tạo của tôi, có lẽ đã được chạy khi tôi khởi động bàn điều khiển, hiển thị giá trị cũ! Không nơi nào trong dự án của tôi là giá trị cũ được liệt kê ở bất kỳ đâu. Điều này khiến tôi tin rằng môi trường đang được lưu trữ bằng cách nào đó hoặc các biến env đang được xuất khẩu đến trình bao của tôi. Tôi đang chạy ra khỏi nơi để xem xét bất kỳ trợ giúp sẽ được đánh giá rất nhiều! Tôi đang phát triển trên máy Mac (10.9.4) với Ruby 1.9.3-p374 và Rails 4.1.0.

Ví dụ:

ROOT/.env

S3_BUCKET=mybucket 

config/initializers/paperclip.rb

Paperclip::Attachment.default_options[:s3_credentials] = {bucket: ENV["S3_BUCKET"]} 

Nếu tôi thay đổi giá trị của S3_BUCKET để "newbucket" và chạy "quản đốc chạy đường ray c "hoặc" đường ray c "để vào bảng điều khiển, đây là những gì sẽ xảy ra:

ENV["S3_BUCKET"] # => "newbucket" 
Paperclip::Attachment.default_options[:s3_credentials] # => {bucket: 'mybucket'} 

Tôi nên đề cập đến hành vi này cũng xảy ra trong các lớp học của tôi mà tôi đã đưa vào/lib. Tôi tưởng tượng điều này là tất cả do một cái gì đó ngớ ngẩn mà tôi đã bỏ qua. Bất kỳ ý tưởng?

+0

Nếu bạn thay đổi env vars và muốn ứng dụng của bạn chọn chúng, bạn phải khởi động lại ứng dụng. Điều này luôn xảy ra. – nzifnab

+0

Vâng, tất nhiên. Để làm rõ mặc dù, SAU KHI khởi động lại ứng dụng, các thay đổi không được chọn trong trình khởi tạo, nhưng chúng được chọn trong băm ENV. – Spencer

+0

Bạn đang sử dụng 'mùa xuân' bằng bất kỳ cơ hội nào? (Kiểm tra Gemfile của bạn.) – fny

Trả lời

24

Nếu bạn đang sử dụng Rails 4 out of the box, nó đi kèm với một viên ngọc gọi Spring đó là dành để làm cho cuộc sống của bạn dễ dàng hơn bằng cách tải trước một thể hiện của ứng dụng của bạn ở chế độ nền và tải lại nó như mã và cấu hình của bạn các tập tin thay đổi.

Mùa xuân, tuy nhiên, chỉ giám sát các tệp cấu hình mặc định của Rails, vì vậy bạn sẽ cần định cấu hình Spring để giám sát thêm bất kỳ tệp nào khác mà bạn muốn kích hoạt tải lại.

Đọc mùa xuân ~/.spring.rbconfig/spring.rb cho cài đặt tùy chỉnh. Bạn có thể thêm thêm dòng sau vào file bạn chọn để xem tập tin .env của bạn cho những thay đổi:

Spring.watch '.env' 

Xem Spring's configuration documentation trong README để biết thêm.

+0

Rực rỡ, cảm ơn! Có vẻ như tôi nên đọc các ghi chú nâng cấp cẩn thận hơn một chút :-). – Spencer

+4

OMFG ... Tôi đã tự hỏi tại sao khởi động lại bàn điều khiển sẽ không nhận các thay đổi, ngay cả khi tôi đã xóa tệp flipp'n! Tôi phải tắt hoàn toàn thiết bị đầu cuối. Cảm ơn bạn vì điều này! Hoàn toàn buồn bã. – manafire

+1

Từ những gì tôi có thể nói, config/initializers không được nạp lại ngay cả khi sửa lỗi này. Xem tại đây: https://github.com/rails/spring/issues/378 – stevo

Các vấn đề liên quan