5

Tôi muốn tải trước cấu hình (từ tệp ".yml"). Trong một trong những file khởi tạo của tôi (config/initializers/facebook.rb) Tôi có dòng mã sau đây:Rails biên dịch trước liên tục uninitialized

FACEBOOK_CONFIG = YAML.load_file("#{Rails.root}/config/facebook.yml")[Rails.env] 

Vì vậy, nó hoạt động như một nét duyên dáng ở chế độ "PHÁT TRIỂN". Khi tôi chuyển sang chế độ sản xuất, nó giữ cho tôi biết rằng FACEBOOK_CONFIG là hằng số không được khởi tạo cho tệp "facebook.js.coffee.erb" của tôi, nằm ở asset/javascript (Nếu nó quan trọng), nếu tôi muốn o "cào tài sản: biên dịch trước" . Tôi đã cố gắng làm công cụ ngẫu nhiên, như: RAILS_ENV=production bundle exec rake assets:precompile hoặc

tài sản cào: precompile: tất cả

, nhưng may mắn không

Tôi đã cố gắng gán "" biến cho môi trường sản xuất của tôi (mặc dù, nó phải đúng theo mặc định), chỉ trong trường hợp.

Tại sao nó không hoạt động ở chế độ sản xuất (Nhưng, tôi muốn nhấn mạnh rằng nó hoạt động (!) Trong môi trường phát triển).

Ai đó có thể trợ giúp vấn đề đó không?

+0

tệp yml của bạn trông như thế nào (trừ thông tin đăng nhập của bạn) và bạn có đang khởi động ở chế độ sản xuất cục bộ hay không trên dịch vụ như heroku? –

+0

Bạn có thể thử tăng ngoại lệ trên tệp trình khởi tạo và xem liệu nó có được kích hoạt không? Một điều cần thử là, nâng cao một ngoại lệ trên tệp khởi tạo và chạy một tác vụ rake khác cũng nạp môi trường Rails. Hãy thử cả hai trên môi trường phát triển và sản xuất (RAILS_ENV = sản xuất) – htanata

Trả lời

0
module Rails 

    class << self 
    def facebook_config 
     @@facebook_config ||= nil 
    end 

    def facebook_config=(facebook_config) 
     @@facebook_config = facebook_config 
    end 
    end 
end 

Rails.facebook_config = YAML.load_file("#{Rails.root}/config/facebook.yml")[Rails.env] 

# And you can use it like this in anywhere: 
puts Rails.facebook_config 
4

Tôi gặp chính xác cùng một vấn đề. Điều này là do tệp javascript (coffescript) của bạn làm cho tham chiếu đến một hằng số được xác định trong bộ khởi tạo. Bởi vì nó được biên dịch trước khi bộ khởi tạo ứng dụng phát ra lỗi.

Đây là giải pháp đơn giản mà tôi đã tìm thấy. Bạn đặt mã này ở cuối tệp application.rb của bạn trong cấu hình:

module AssetsInitializers 
    class Railtie < Rails::Railtie 
    initializer "assets_initializers.initialize_rails", 
       :group => :assets do |app| 
     require "#{Rails.root}/config/initializers/facebook.rb" 
    end 
    end 
end 

Tự tải lên một số tệp nhất định từ thư mục khởi tạo. Nó giải quyết vấn đề của tôi.

Hy vọng đây cũng là vấn đề của bạn.

+0

Không chắc chắn nếu OP vẫn đang theo dõi câu hỏi này - nhưng tôi thực sự sẽ ngạc nhiên nếu điều này không giải quyết được prob. Tôi chỉ tạo bọt ở miệng +50 điểm ở đây. – Laurent