괜찮아.
다시 오신 것을 환영합니다.
이 비디오에서 우리는 마지막 비디오에서 언급 한 문제를 해결하려고합니다. 바로 지금 우리가 로컬 클라우드 9 개발 환경과 Heroku의 프로덕션 환경간에 하나의 데이터베이스를 사용하고 있습니다.
그래서 우리의 배포 된 코드는 우리의 테스트 환경과 동일한 데이터베이스를 사용하고 있습니다. 이것은 실제로 좋은 생각이 아닙니다.
상황이 제대로 작동한다는 것은 코드가 깨 졌거나이 방법으로는 얻을 수 없다는 점에서 문제가되지 않지만 실제로는 좋은 사례가 아닙니다. 왜냐하면 우리가 큰 응용 프로그램 우리의 모든 사용자가 배포 된 우리의 메인 데이터베이스.
우리는 일을 시험하고 실수로 데이터베이스의 항목을 삭제하거나 전체 데이터베이스를 삭제하는 새로운 기능을 추가하는 것을 원하지 않습니다.
우리의 개발 환경에서.
그래서 당신은 그것들을 별도로 유지하기를 원합니다.
그리고 우리가 지금하고있는 일을 바로 지금 증명하는 것입니다.
우리가 한 일은 로컬 호스트를 사용하는 대신 코드를 업데이트 한 것임을 기억합니다.
당신이나 당신이 거기에 있었는지 10이나 어떤 데이터베이스를 먹일 수는 없지만, 클라우드 9의 로컬 버전은 Mangu 랩으로 업데이트했습니다.
이것이 우리의 Mongo 랩 인스턴스이며, 지금 당장 실행되는 것과 동일한 것입니다.
그리고 Heroku에서 나는 양쪽 페이지를 새로 고침 할 것이다.
이것은 우리가 하나의 로데오 해변이 있다는 것을 알 수 있듯이 Heroku 배치입니다. 그리고 우리는 로데오 해변이 다시 연결되어 있음을 증명합니다.
여기에 새로운 캠프장을 추가합시다.
이 이름은 커비 코브가 될거야.
나는 단지 내가 여기에 전적으로 부끄러워하는 플러그를 몇 밤 찍었던이 이미지를 여기 사용할 것이다.
당신이 그것에 대해 할 수있는 일은 없습니다.
그래서 저는 여기에있는 붙여 넣기를 복사하여 자동 완성을 할 것입니다.
고맙습니다.
Chrome이 제출을 클릭합니다.
좋아, 여기 우리가 헤로 쿠에있어.
그리고 나는 새롭게한다.
여기에 로컬로 생성 된 동일한 Kirby 코드가 있습니다.
따라서 재앙적인 사건조차도 아닙니다.
개발자가 실수로 전체 데이터베이스를 삭제할 수 있습니다.
보자.
삭제 경로가 작동하고 있음을 알고 싶었던 기능을 테스트하고 싶다고 가정 해 봅시다.
글쎄 내가 여기에 들어가서 내가 서명하지 않은 것을 삭제했다면 내가 삭제했다면 나는 그것을 제작에서 지우고있다. 이는 내가 결코 좋은 사람의 실제 데이터를 삭제한다는 것을 의미한다.
따라서 별도의 데이터베이스를 갖는 것이 좋습니다.
따라서이 문제를 해결하는 한 가지 방법은 클라우드 9로 돌아가서 클라우드 9 스위치로 돌아가는 것입니다.
여기서 우리는 이제 캠프 localhost 버전을 다시 사용하여 여기 서버를 다시 시작하고 지금 클라우드 9 5 새로 고침을 사용하도록 여기에서 사용하고 있습니다.
우리는 이전 버전을 사용하고 있거나 로컬 버전 이전에 사용했던 것을 볼 수 있습니다. Heroku에서는 Monga 랩 인스턴스를 사용하고 있습니다. 지금은 동기화가 이루어지지 않았기 때문입니다.
우리는 클라우드 9에서 로컬로 변경 한 사항을 확인한 후 OK를 누릅니다.
그리고 이것은 괜찮습니다.
이것은 유효하지만 그것은 일종의 성가신 일입니다. 왜냐하면 내가 C S를 변경하고 Heroku에서 업데이트하고 싶은 새로운 기능을 추가한다고 말하고 싶기 때문입니다.
그럼 당신이 아는 데이터베이스에 대해 내가해야할 일을 알아 내야 할 것입니다.
나는 주석을 주석으로 처리하거나 주석을 다시 달아야한다. 주석을 달고 명령을 모두 Heroku에 넣는다. 그런 다음 새로운 기능을 로컬로 추가하거나 테스트하려고한다.
나는 이것을 주석 처리하고 이것을 주석 처리하지 않으며 그것은 단지 실제로는 좋은 해결책이 아니라는 것입니다.
그러나 우리가 취할 수있는 다른 해결책이나 다른 접근법이 있습니다.
근본적으로 우리가 할 일은 우리가 프로덕션 환경에서 실행 중이거나 데이터베이스를 설정했는지 여부를 알려주는 코드를 작성하는 것입니다.
그렇지 않으면 여기에 설정하십시오.
이제는 실제로 if 문이 아닙니다.
우리가 생산 중이거나 Heroku를 사용 중이라면 우리가 생산 중이라는 것을 기술적으로 확인하지는 않습니다.
그것은 조금 다릅니다.
우리가 할 일은 환경 변수라는 것을 사용하는 것입니다.
그래서 우리는 전에 그들을 보았습니다.
이 작은 라인은 바로 리뷰와 모든 Express 어플리케이션 프로세스가 EMV IP와 같은 포트 프로세스를 부러워합니다.
그럼이게 무슨 뜻인지 바로 여기.
그리고 저는 이것을 간단히 살펴 보았습니다. 그러나 당신이 당신의 벨트 밑에서 더 많은 경험을 할 수있게되었을 때 조금 더 이해할 것이라고 생각합니다.
이것이 의미하는 바는이 코드가 실행되는 환경입니다.
따라서 클라우드 9에서 포트를 부러워했던 프로세스는 Roku의 포트가 IP 일 가능성이 높습니다.
따라서 이들은 실행되는 환경에 따라 변경되는 하드 코딩되지 않은 변수를 추가하는 방법입니다.
그래서 80 80 같은 것을 넣을 수 있습니다.
물론 하드 코드 된 것입니다.
그것은 역동적이지 않습니다.
이것은 우리가 환경에 반응하는 변수를 가질 수있게 해주고, 자바 스크립트의 노드는 실제로 노드 일뿐입니다.
그들은 항상 당신이 접근하는 방법 인 D-NV 프로세스로 시작합니다.
그리고 변수의 이름.
여기에서 우리가하려고하는 것은 Yoro 데이터베이스를 호출 할 환경 변수를 가지고 있습니다. Heroku에서 우리는 데이터베이스를 설정하게 될 것입니다. 여러분은이 긴 일이 될 수 있습니다. 그리고 나서 모든 것은 기본적으로 프로세스를 작성합니다. 당신이있는 데이터베이스.
그러면 해당 환경에 대한 올바른 URL을 참조하게됩니다.
그리고 나서 우리는 여기서 똑같은 일을 할 것입니다.
우리는 클라우드 9 데이터베이스에 대해 잘 알고 있습니다. Mongar D-B 콜론이 될 Arel은 우리가 Camphost 10을 사용할 수있는 localhost를 슬래시합니다.
그래서 다시 아이디어는 우리가 당신에게 어떻게해야하는지 알려주지 않은 환경 변수를 만들 수 있다는 것입니다.
이것은 당신이 그들을 액세스하는 방법입니다.
그러나 이것이이 응용 프로그램 외부에서 오는 것을 기억하십시오.
이것은 코드를 실행중인 실제 응용 프로그램 또는 실제 환경에서 발생합니다.
그래서 우리가이 작업을 어떻게하는지 설명하기 위해 여기서 끝내서 시작하겠습니다. 유형 내보내기가 새로운 명령 일 때 환경의 명령 행에 새로운 환경 변수를 작성한 다음, 보통 대회가 모든 대문자로해야하는 내 환경 변수를 작성하려고합니다.
당신이 여기에서 볼 수 있듯이 IP 포트.
그래서 우리는 데이터베이스를 할 것입니다.
당신은 모두 평등하고 우리는 클라우드에서 실행하고자하는 것과 똑같이 재설정을 시작할 것입니다. 9 인스턴스 당신은 우리 모두가 당신과 동등한 데이터베이스를 원할 것입니다.
그냥 그렇게하고 있는지 확인하기 위해 입력하십시오.
여기 실제로 바로 여기로 가려고합니다.
해당 로그 프로세스를 취소하십시오.
아빠가 부러워.
그리고 이것은 당신이 알고있는 데이터베이스와 일치해야합니다.
그리고 만약 우리가이 Mongar D-B Colon을 보게된다면, Canvey 10의 침입자가 빠져 나갔거나 프린트 된 것입니다. 그런 다음 우리가 알고있는 개발 데이터베이스를 성공적으로 설정했음을 알게됩니다.
그럼 노드가 어떻게되는지 봅시다.
예, 우리는 여기에 인쇄 된 것을 보았습니다.
나는 로컬 호스트를 출력 해본 적이 없다.
가장 할 수있어.
나는 환경 변수 데이터베이스에 대해 이야기했다.
이제 우리가해야 할 일은 Mangeshkar가 프로세스 NVI 데이터베이스에 연결하는 것입니다.
당신은 IRA 그리고 Heroku에서 우리는이 Mongo 실험실 거인으로 알고있는 데이터베이스를 업데이트해야합니다. 당신은 모든 문자열이지만 우리는 Heroku에서 일어나는 것을 원합니다.
우리는 이것을 클라우드 9에 남겨두고 싶습니다.
그럼 다시 작동시켜야합니다.
큰.
여기에 우리의 올바른 버전으로 가자. 새로 고침을해라. 우리는 여전히 지역 코드를 얻고있다. Heroku는 어떤 코드도 Heroku에 넣지 않았기 때문에 물론 변경되지 않았다.
이제 우리가 이것을 저장하고 추가하고 커밋하면 업데이트하라는 명령을받습니다. IRL은 Heroku M을 밀어냅니다.
우리가 Heroku 버전을 지금 실행하면 적어도이 작업이 끝나면이 페이지를 새로 고치면 Heroku가 프로세스 학습 및 비디오 데이터베이스를 찾을 수있는 서버이기 때문에 오류가 발생합니다 그것이 설정되지 않았기 때문에 알 수 있습니다.
그래서 새로 고침에 조금이라도 걸릴 수도 있고 응용 프로그램 오류가 발생해야하며 거기에 나가는 동안 우리는 가야한다는 것을 보여 주기만하면됩니다.
정확히 무슨 일이 일어나고 있는지 정확히 알고 싶다면 응용 프로그램 오류.
Heroku 로그이고 여기에서 볼 수 있습니다. 우리가 얻는 오류 메시지가 얼마나 유용 할 지 정직하지 않습니다.
어디 보자.
이것은 당신이 원했던 것을 정확히 알려주지 않는 메시지 중 하나 일지 모르지만 Mongar D-B에 오류가 있음을 말하고 있습니다.
Yesso는 명시 적으로이 데이터베이스가 문제가되는 것을 언급하지는 않습니다. 실제 일어나고있는 것은 데이터베이스가 없다는 사실을 제외하고는 기술적으로 문제가되지 않는 빈 문자열에 가장 많이 연결하려고하기 때문입니다 당신은 빈 문자열입니다.
그래서 일종의 예상치 못한 오류 메시지입니다.
그래서 문제는 우리가 프로세스를 설정하지 않았거나 Heroku에서 환경 변수를 설정하지 않았다는 것입니다.
그래서 우리가 Heroku에 가면 우리가 할 수있는 몇 가지 다른 방법이 있습니다.
아마도 여기에 다시 로그인해야 페이지가 새로 고쳐집니다.
아니, 다시 거짓말 할 필요는 없었어.
여기에 우리의 응용 프로그램입니다.
우리가 들어가서 우리가 설정에 들어가면 나는 그것이 있다고 믿습니다.
그런 다음 스크롤을 계속하거나 구성 변수로 이동하십시오.
여기에 변수를 추가 할 수 있습니다.
우리가 데이타베이스를 그 거대한 문자열로 만들고 싶습니다.
나는 그것을 복사하고 추가를 클릭하십시오.
그리고 우리가 지금 돌아 가면 페이지를 새로 고침 해보십시오.
그것은 완벽하게 작동합니다.
그래서 그것이 그 일을하는 한 방법입니다.
Heroku에 가서 Erlass 키 값 쌍 데이터베이스와 키 변수 이름 또는 환경 변수와 값을 추가하는 방법을 보여 줬습니다.
명령 줄을 통해 명령을 실행할 수있는 다른 방법이 있습니다.
여기서 바로 할 수 있습니다.
나는 번호가있다.
J.S. 지원 문서는 Heroku에서이 라인을 열고 Heroku 구성 콜론 세트를 누른 다음 키는 값과 동일합니다.
그래서 우리가 원한다면이 첫 번째 비트를 복사 할 것입니다. 실제로 그렇게하지 않을 것입니다.
나는 엔터를 치지 않을 것이지만 단지 Heroku 설정 Kolin이 될 것이고 그 다음 데이터베이스가 같음을 보여주고 싶습니다. 그리고 나서 당신이 붙어있는 붙여 넣기를했습니다.
그러나 나는 그것을 할 것이다.
아직 언급하지 않은 또 다른 점은 환경 변수를 사용하는 또 다른 이유가 있다는 것입니다. 환경 변수를 사용하는 또 다른 이유는 숨겨진 것이므로 개발자가 무엇이든간에이 코드를 좋은 허브에 배치하면 노출되지 않습니다.
우리는 당연히 데이터베이스를 가지고 싶지 않거나 이미 데이터베이스가 없다는 것을 알고 싶지 않습니다.
그러나 이것은 분명히 실제 앱이 아닙니다.
그러나 오픈 소스 응용 프로그램이나 코드 또는 공개 소스의 일부인 경우에도 이것이 실제 응용 프로그램이라면 필자는 자신의 데이터 또는 데이터베이스를 노출하고 싶지 않을 것입니다. 코드를 보는 모든 사람에게 자신이 있습니다.
따라서이 라인을 Mongar가 시작하면 NV dot 데이터베이스가 더 이상 문제가되지 않습니다.
개발자가 보거나 코드를 탐색하는 사람이 집에 돌아와서 자신의 데이터베이스를 설정해야하는 모든 것입니다.
환경 변수를 모두 사용하고 있습니다.
승인.
그래서 우리가 한 일을 되풀이합시다.
우리는 개발과 생산을위한 하나의 데이터베이스 문제를 해결하기위한 공유 데이터베이스 문제를 가지고 시작했습니다.
데이터베이스 URL 환경 변수를 클라우드 9에서 로컬로 설정하고 동일한 변수에 대해 서로 다른 두 값을 설정합니다.
그런 다음 환경 변수 인 ENVI 데이터베이스를 사용하여 해당 변수에 액세스했습니다.
그래서 우리에게는 두 가지 결과가 있습니다.
제가 언급 할 것은 기본값을 설정할 가치가 있다는 것입니다.
그러니 내 컴퓨터를 다시 시작하면 어떻게 든 내 응용 프로그램을 망쳐 놨다 고 가정 해 봅시다.
내 환경 변수에서이 작업 공간을 초기화했는지 모르거나 다른 사람에게 보내고 싶습니다. 코드를 작성하기 위해 사용할 수있는 기본 데이터베이스를 모르도록하고 싶습니다. 이 설정을 명시 적으로 설정하지 않으면 완전히 중단됩니다.
내가 할 수있는 것은 약간의 백업을 추가하여 변수를 만들어서 호출하는 것입니다.
당신은 모두 평등하고 우리는 당신이 진짜 인 데이터베이스에서 시작된 프로세스를 수행 할 것입니다.
그리고 나서 우리는 당신이 거기에 있다는 것을 놓을 것입니다. 그래서 당신은 ELLYARD가 이미 그것을 잃어 버렸는지 당신이 무엇을했는지 봅시다.
너 거기있다.
그래서 이것은 단지 백업 일 것입니다.
그래서 다시 여기서 일어나는 일은 기능을 변경시키지 않아도되지만 어떤 이유로 든 내 환경 변수가 망가 졌거나 존재하지 않는다는 것입니다.
코드를 깨기보다는 어떤 일이 일어날 지 당신이 모든 변수가 있다면 환경 변수와 동등 할 것입니다.
그것이 빈 문자열이라면, 또는 존재하지 않는다면, 우리의 백업 인 이것과 같을 것입니다.
이 경우 클라우드 9에 똑같은 것이 있습니다.
다시는 필수 사항이 아닙니다.
무언가 잘못되었을 때를 대비하는 것은 좋은 습관입니다.
하지만 실제로 이것을 보게되는 것이 꽤 일반적이기 때문에 실제로 당신에게 보여주고 있습니다.
승인.
이런 종류의 접근 방법은 오래 가지 못했거나 회피 할 수는 없지만, 다른 데이터베이스 프로세스를 원한다는 사실로 귀결됩니다. 우리는 비디에 데이터베이스에서 IRL을 사용하여 노드 앱에서 환경 변수에 액세스하는 방법을 사용합니다.
환경 변수가 노드 일이나 자바 스크립트 일은 아니지만 그것을 분명하게하고 싶습니다.
Ruby 응용 프로그램 레일 응용 프로그램 Python 응용 프로그램은 모두 환경 변수에 액세스 할 수 있습니다. 이와 비슷하게 비교적 간단합니다. 노드에서 루비와 같은 다른 언어로 프로세스를 작성합니다.
당신은 종종 알고있는 ENV 데이터베이스와 같은 것을 보게 될 것입니다.
따라서 그것은 보편적 인 개념으로 노드 특유의 것이 아니며 온갖 종류의 애플리케이션에서도 보편적입니다.
데이터베이스 URL에이 URL을 사용하지 않고 언제든지 원하는 URL을 사용할 수 있습니다.
여기 오타처럼 보입니다.
어느 쪽이든 그것은 localhost 여야합니다.
다른 환경 개발 또는 생산간에 서로 다른 정보를 원할 때마다이 옵션을 사용하십시오.
누군가로부터 정보를 숨기거나 모호해하고 예를 들어 도움을 얻고 자 할 때도 이것을 사용합니다.
따라서 귀하가 귀하의 애플리케이션에 페이팔 또는 Strype 신용 카드 처리 API 정보를 가지고 있다면 코드에 필요하기 때문에.
음, 현재를 공유하고 싶다면 분명히 그것을 밀어 내고 싶지는 않은지 확인하십시오.
그래서 당신이 할 수있는 것은 환경 변수를 만들고 프로세스와 같은 것을하는 것입니다.
Ian VI는 매우 민감한 정보를 잃어 버렸습니다. 코드를 공개하고 싶다는 문제를 해결할 수있는 방법이기도합니다. 공개 키로 만들지 만 누군가가 귀하의 API 키를 가져다가 수십만을 돌릴 수있는 곳에 매우 민감한 정보를 공유하고 싶지는 않습니다. 수천 달러가 실제로 발생하는 큰 회사 중 일부는 그 정책에 대해 훨씬 더 좋습니다.
예를 들어, 아마존 (Amazon) API 키 또는 AWOS 정보를 Amazon Web Services 웹 서비스 정보로 가지고 있으면 실제로 알 수있는 정보를 얻을 수 있으며,이를 즉시 취해야하거나 사용을 중지 할 필요가 있다고 말하는 메시지를 보냅니다. 그것.
누군가가 수천 달러를 수천 달러를 부과 할 수 있습니다.
그들은 당신이나 기본적으로 귀하의 계정을 사용하여 지불 할 필요가없는 거대한 청구서를 발행 할 수 있습니다.
비교적 자주 발생합니다.
나는 그 문제와 내 문제를 안고있는 학생들이 있다는 것을 들었지만 그 전에는 들었습니다.
괜찮아.
그래서 부러움을 푸는 것은 우리가 환경 변수에 접근하는 방법입니다.
우리는 두 개의 데이터베이스를 가지고 캠프가 이제 두 개의 다른 데이터베이스를 배치했습니다.
그들은 우리가 원하는 방식으로 어떤 정보도 공유하지 않습니다.