1

.env의 파일에 변수에 배열을 할당 할 수 없습니다 :난과 같이, 배열을 만들고 .env의 파일에 변수에 할당 할 (레일 응용 프로그램)

FOOD=["cookies", "grapes", "cake", "pie"] 

을 그리고 다음, 별도의 seed.rb 파일에서 아래의 예처럼, 개체의 인스턴스를 만들고, 내 개체의 특성을 정의하기 위해 "식품"배열을 사용

User.create(name: "jane doe", favorite_foods: ENV["FOOD"]) 

이 작동하지 않습니다 . 데이터베이스를 시드 할 때이 User 인스턴스는 만들어지지 않습니다. 도와주세요. 필자는 "php"와 "config"파일에 대한 내용을 보았지만이를 달성하기위한 구체적인 단계별 세부 정보는 없습니다.

Gitub 또는 Heroku에 내 앱을 푸시하면 표시되지 않게하려는 .env에 물건을 넣습니다. 그래서 내 앱을 배치/저장하는 모든 공공 장소에 FOOD 배열이 보이기를 원하지 않는다는 것을 명심하십시오. 감사.

답변

3

나는 .env의 파일에서 환경 변수를로드 할 감독 또는 Dotenv를 사용하는 것이 좋습니다 것입니다. 레일 설치 지침 (https://github.com/bkeepers/dotenv)을 따르십시오.

다음은 catch입니다. 내가 알 수있는 한, 배열을 환경 변수로 직접 저장할 수 없습니다. 대신에 할 수있는 일 - 그리고 대부분의 앱에서 쉼표로 구분 된 문자열을 사용하고 Ruby에서 처리합니다. 예를 들어

:이 배열에 쉼표로 구분 된 문자열을 분할하고, 그 과제를 사용

# .env 
FOOD=cookies,grapes,cake,pie 

# seeds.rb 
User.create!(
    name: "Jane Doe", 
    favorite_foods: ENV.fetch('FOOD').split(',') 
) 

.

해당 환경 변수를 확인합니다 여기 #fetch을 사용하여 등을합니다 (!와) .create! 방법 인스턴스가 생성되지 않는 이유를 즉시 유효성 검사 오류를 반환합니다 당신이, 디버깅 도움이 될 수 있습니다, 또한

사용 존재할 경우 오류를 발생시킵니다. 당신이 환경 변수가 누락 된 경우 기본 목록으로 폴백 앱을 원한다면

, 당신은 또한 사용할 수 있습니다

ENV.fetch('FOOD', 'default,food,list').split(',') 
#=> ['default', 'food', 'list'] 
+0

이 일! 고마워. 나는 이미 "dotenv"보석을 사용하고 있었지만 거기에 배열이 있었다. 쉼표로 분리 된 문자열을 만든 다음이 파일을 my seed.rb 파일의 배열로 분할하는이 방법이 효과가있었습니다 !! –

+0

좋아요! 내 대답을 받아 들일 수 있겠 니? – Matt