2015-04-29 13 views
10

Gần đây tôi đã lấy một trong các repos của tôi từ Git. Sau khi khởi chạy máy chủ, tôi nhận được thông tin sau: Thiếu secret_token và secret_key_base. Điều này có thể xảy ra vì tôi đã bao gồm các secret.yml trong .gitignore của tôi.Thiếu `secret_token` và` secret_key_base` - Rails 4.2.0 với RVM

thiết lập hiện tại của tôi

  • Ubuntu 14.04
  • ruby ​​2.2.0p0
  • ray 4.2.0
  • RVM 1.26.11
  • máy chủ địa phương (không xa) môi trường
  • phát triển

Nhiều tài nguyên trực tuyến nói rằng tôi phải tạo ra một khóa mới bằng cách sử dụng rake secret và thêm nó vào secrets.yml. Đặt khóa bên trong secret.yml và khởi động lại máy chủ rails không hoạt động.


được sửa đổi: Thêm nội dung của secrets.yml dưới đây. -04/30/15 09:04 EST

development: 
    secret_key_base: LONG KEY HERE 

test: 
    secret_key_base: LONG KEY HERE 

# Do not keep production secrets in the repository, 
# instead read values from the environment. 
production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 

hãy biết điều này được thiết lập như một môi trường phát triển trên một máy chủ địa phương ở nơi tôi cư trú (không Heroku).


Trạng thái tài nguyên khác Tôi cần thêm mục nhập bên trong secret_token.rb nhưng tệp này không tồn tại trong dự án của tôi.

Cách duy nhất ứng dụng của tôi sẽ chạy là nếu tôi là để tạo ra một tập tin secret_token.rb và thêm hoặc là một trong những cách sau bên trong của nó:

MyApp::Application.config.secret_token = if Rails.env.development? or Rails.env.test? 
    ('x' * 30) # meets minimum requirement of 30 chars long 
else 
    ENV['SECRET_TOKEN-'] 
end 

hoặc

MyApp::Application.config.secret_token = 'the secret key' 

Tại sao là tập tin này được yêu cầu khi tài liệu Rails nói rõ loại bỏ nó?

3.3 config/secrets.yml

Các secret_token.rb không được yêu cầu để chạy cho các dự án tạo mới, chỉ có những người từ repo Git của tôi.

Vui lòng thông báo lý do tại sao ứng dụng của tôi cần secret_token.rb mặc dù trạng thái tài liệu của Rails nếu không hoặc ứng dụng của tôi sẽ không chạy mà không có nó.

được sửa đổi: -04/30/15 09:27 EST

Một hành vi lạ là tôi có thể đổi tên secrets.yml trong khi secret_token.rb vẫn tại chỗ và các ứng dụng sẽ vẫn chạy.

Tôi đã cố gắng đổi tên secret_token.rb, thêm <%= ENV["SECRET_KEY_BASE"] %> để phát triển và tôi vẫn gặp phải vấn đề về secret_token bị thiếu.

Đã chỉnh sửa: Đã thêm git repo bên dưới. -05/08/15 02:50 EST

git repo: https://github.com/captain-awesome/blog_mac

Vài điều kỳ lạ là nếu tôi được sửa đổi bất kỳ một trong những 32 ký tự, lưu secret_token.rb, tải lại các máy chủ ... ứng dụng của tôi sẽ chạy. Có phải chuỗi ký tự 32 trong secret_token.rb mà tôi có thể tự tạo ra không? Nếu vậy, mục đích thực sự của cào mật là gì?

+0

Vì vậy, trước hết, '('x' * 30)', không không không. Bạn có thể tạo một mã thông báo bí mật bằng cách chạy 'rake secret' trong ứng dụng của mình, đó là cách đúng để tạo mã thông báo bí mật. Nhưng điều này không trả lời phần lớn câu hỏi của bạn, vì vậy tôi sẽ để nó như một bình luận ở đây. Bạn cũng có thể muốn tra cứu mục đích của mã thông báo bí mật, vì vậy bạn hiểu những gì đang diễn ra. – jrochkind

Trả lời

4

Bạn có khởi chạy máy chủ của mình cục bộ trong phát triển hoặc trong một số môi trường khác (ví dụ, trên Heroku trong sản xuất) không? Bởi vì nếu bạn đang chạy trên Heroku, sau đó bạn sẽ cần phải loại bỏ secrets.yml từ .gitignore của bạn để Heroku có thể tìm ra khóa bí mật là gì. Cách an toàn để xử lý này là lưu trữ khóa bí mật của bạn dưới dạng biến môi trường trên Heroku và có điểm secrets.yml của bạn với nó (xem bên dưới).

Nếu bạn đang chạy cục bộ, bạn sẽ có thể xóa secret_token.rb miễn là bạn đã đặt secret_key_base cho mọi môi trường bên trong tệp secrets.yml của mình. Bạn không đăng những gì bạn trông như thế nào, nhưng nó sẽ giống như thế này:

development: 
secret_key_base: somerandomkey 
test: 
secret_key_base: somerandomkey 
staging: 
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 
production: 
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 
+0

Xin chào Hannah, cảm ơn bạn đã trả lời. Tôi đã thêm các nội dung cho các secret.yml và tuyên bố dàn dựng của tôi như đang được phát triển trong bài viết của tôi. –

4

Tính đến Rails 4.1, có một new way để lưu trữ bí mật.

Trong Rails 4.1+, bạn cần config/secrets.yml - không xóa nó! Tôi có thể thấy trong repo GitHub của bạn, bạn đang sử dụng Rails 4.2 và tệp này bị thiếu. Đây là lý do tại sao bạn thấy lỗi đó. (Lưu ý: nếu bạn vẫn có tệp secret_token.rb, hãy xóa tệp đó. Rails 4.1+ không còn sử dụng nó).

Tôi khuyên bạn nên sử dụng dotenv rails.

Add và cam kết config/secrets.yml:

default: &default 
    secret_key_base: <%= ENV['SECRET_KEY_BASE'] %> 

development: 
    <<: *default 

test: 
    <<: *default 

staging: 
    <<: *default 

production: 
    <<: *default 

Bất cứ khi nào bạn khởi động đường ray, bạn cần phải chắc chắn rằng bạn thiết lập các hệ thống SECRET_KEY_BASEenvironement biến. Với tập tin YAML ở trên, bạn cần đảm bảo biến môi trường này được đặt trên bất kỳ máy nào khởi động ứng dụng Rails của bạn trong bất kỳ môi trường nào. Điểm mấu chốt là, cách biến này được đặt có thể thay đổi tùy theo vị trí/máy của bạn.

On của bạn máy tính cục bộ (ở nhà), tạo ra một tập tin gọi là .env với một bí mật:

echo SECRET_KEY_BASE=`rake secret` > .env 
rails server 

Bạn chỉ cần tạo tập tin này lần. Khi đường ray bắt đầu, dotenv sẽ đọc tệp .env này và đặt biến môi trường SECRET_KEY_BASE một cách thích hợp.Không cam kết tệp này - trên thực tế, tôi khuyên bạn nên thêm tệp này vào số .gitignore của mình.

Sau đó, khi bạn triển khai một máy chủ xóa (máy chủ sản xuất/triển khai), mọi thứ sẽ khác nhau. Bạn có thể cần sử dụng SSH để đặt biến môi trường. Trên Heroku, bạn có thể đăng nhập vào số app's dashboard và đặt giá trị môi trường (hoặc sử dụng config:set trong Heroku Toolbelt).

Chỉnh sửa:Lưu ý Tôi không phát minh ra điều này. Đây là phương pháp được sử dụng bởi Suspenders.

0

Cách đơn giản để tạo ra keybase token và bạn là:

bundle exec rake secret 

Bây giờ bạn sẽ nhận được một chuỗi dài như:

ddf4a6d37a956089984c8fe6160a6e3c18e48a448a07a50e4ab10a4edd6d3597f13ad9b6e0af4f5723f1ef52bfd2ffa78ab5b815d2bb8b15f14f48e7e307baad

bản sao cùng chuỗi mà bạn nhận được trên thiết bị đầu cuối của bạn/CMD

Không chạy lệnh này:

export SECRET_KEY_BASE=ddf4a6d37a956089984c8fe6160a6e3c18e48a448a07a50e4ab10a4edd6d3597f13ad9b6e0af4f5723f1ef52bfd2ffa78ab5b815d2bb8b15f14f48e7e307baad 

rails s -e production 

Bất cứ khi nào bạn muốn thay đổi sau khóa bí mật của mình bước trên. Đừng viết nó trong hồ sơ vì lý do bảo mật.

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