Rails 애플리케이션을 프로덕션으로 변경


190

프로덕션 모드에서 실행되도록 Rails 애플리케이션을 변경하려면 어떻게해야합니까? 예를 들어 환경 설정 파일 (environment.rb)이 있습니까?


2
두 번째 답변은 더 많은 투표권을 가지고있는 것으로 보입니다. 문제가없는 한 빠른 검토를하고 두 번째 답변을 기꺼이 받아들이시겠습니까? 미래 방문자를 도울 것입니다. Thx :)
진화

답변:


73

Apache 및 Phusion Passenger를 사용하여 프로덕션 모드에서 단계별로 Rails 4 앱을 설정하고 실행하는 방법 :

일반적으로 Rails 프로젝트에 들어가서 http://something.com:3000rails s 에서 앱의 개발 버전을 얻을 수 있습니다 . 생산 모드는 구성하기가 조금 까다 롭습니다.

나는 이것을 잠시 동안 엉망으로 삼았으므로 초보자 (나 같은)를 위해 이것을 쓸 것이라고 생각했다. 인터넷 전체에 퍼지는 몇 가지 작은 조정이 있으며 이것이 더 쉬울 것이라고 생각했습니다.

  1. 서버의 핵심 설정에 대해서는이 안내서를 참조하십시오 (CentOS 6, 거의 모든 Linux 버전에 적용해야 함). https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-with-apache-and-passenger-on-centos-6

  2. 승객을 설정 한 후 /etc/httpd/conf/httpd.conf디렉토리 구조를 반영 하도록 파일을 편집했는지 반드시 확인 하십시오. DocumentRoot를 Rails 프로젝트 / public 폴더로 지정하려고합니다.httpd.conf 이런 종류의 디렉토리가 있는 파일의 /var/www/html/your_application/public모든 위치 : 업데이트해야합니다. 그렇지 않으면 모든 것이 매우 좌절됩니다. 나는 이것을 충분히 강조 할 수 없다.

  3. 서버를 재부팅하십시오 (또는 최소한 Apache service httpd restart)

  4. Rails 프로젝트 폴더를 입력 /var/www/html/your_application하고로 마이그레이션을 시작하십시오 rake db:migrate. 나중에 테이블을 추가 할 계획이더라도 데이터베이스 테이블이 존재하는지 확인하십시오 (이 또한 1 단계의 일부 임).

  5. RAILS_ENV=production rake secret-추가 할 수있는 secret_key가 생성됩니다 config/secrets.yml. 실행하지 않기 위해 이것을 config / secrets.yml에 복사하여 붙여 넣을 수 있지만 권장하지는 않습니다. 개인적으로이 단계를 수행하여 다른 모든 것이 작동하는지 확인한 다음 다시 변경하고 나중에 소스를 제공합니다.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompile정적 자산을 제공하는 경우 그러면 js, css, 이미지 파일이 /public폴더 로 푸시됩니다 .

  8. RAILS_ENV=production rails s

이 시점에서 http://something.com/whatever대신 앱을 사용할 수 있어야합니다 :3000. 그렇지 않은 passenger-memory-stats경우 다음과 같은 항목이 있는지 확인하십시오.908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

나는 아마도 유쾌한 것을 놓쳤지만 과거에는 나에게 효과적이었다.


2
이 답변을 stackoverflow 문서로 마이그레이션해야한다고 생각합니다.
Whitecat

아파치와 같은 웹 컨텐츠 전달을 사용하지 않으려면 RAILS_ENV = production 옆에 RAILS_SERVE_STATIC_FILES = 1을 추가하면 레일이 모든 파일을 제공하므로 레일에 모든 파일을 제공하지 않습니다. 실제 생산 상태 ...
3d0

351

이것은 이제

rails server -e production

또는 더 컴팩트

rails s -e production

레일 3+ 프로젝트에서 작동합니다.


33
또는 짧은 버전rails s -e production
Pavel Nikolov

2
Heroku와 같은 클라우드 서비스는 어떻습니까? 어떻게 실행 server -e production합니까?
Green

클라우드 서비스에는 일반적으로 환경을 지정하는 옵션이 있지만 production기본적으로 기본값입니다.
James Billingham

2
echo "export RAILS_ENV=production" >> ~/.bash_profile
Meekohi

가장 선호되는 답변은 StackOverflow 설명서를 작성하는 것입니다.
dmanexe

61

Passenger 에서 실행하는 경우 기본값은 아파치 conf에서 프로덕션에서 실행하는 것입니다.

<VirtualHost *:80>
  ServerName application_name.rails.local
  DocumentRoot "/Users/rails/application_name/public"
  RailsEnv production ## This is the default
</VirtualHost>

mongrel 또는 webrick을 사용하여 로컬 서버를 실행하는 경우 다음을 수행 할 수 있습니다.

./script/server -e production

또는 bash에서 :

RAILS_ENV=production ./script/server

실제로 enviornment.rb에서 RAILS_ENV 상수를 재정의하면 아마도 최후의 수단이 될 것입니다. 아마도 설정되지 않을 것입니다 ( 다른 대답을 보았습니다 )


54

경우 mipadi의 제안은 하지 작업을 수행,이에 대한 설정 / environment.rb에 추가

# force Rails into production mode when                          
# you don't control web/app server and can't set it the proper way                  
ENV['RAILS_ENV'] ||= 'production'

Heroku와 같은 클라우드 서비스는 어떻습니까? 수 ENV['RAILS_ENV'] ||= 'production'도 그들에 적용?
Green

이 파일을 오래 전에 편집하고 잊어 버렸습니다. 상기시켜 주셔서 감사합니다. 많은 시간을 절약했습니다
Agnes

19

환경 변수 RAILS_ENV를로 변경하십시오 production.


3
환경 변수는 어디에 있습니까?
BKSpurgeon

에있을 수 있습니다 ~/.bashrc또는 ~/.bash_profile단순히export RAILS_ENV=production"
마아 Marzouk


18

환경을 스크립트 / 서버로 전달할 수도 있습니다.

$ script/server -e production

12
rails s -e production

RAILS_ENV=로 서버를 실행합니다 'production'.

이 외에도 자산 경로를 설정해야합니다. production.rb

config.serve_static_assets = true

이것이 없으면 애셋이로드되지 않습니다.


죄송합니다 ... 공언 할 때 투표권을 행사했습니다. 오류 및 공표를 수정하기 위해 약간 수정했습니다.
tomd

7
RAILS_ENV=production rails s

또는

rails s -e production

기본적으로 환경은 개발입니다.


5

다른 사람들이 게시 한대로 : rails server -e production

또는 내 개인적인 관심 : RAILS_ENV=production rails s


2

에서 레일 3

Rails.env = ActiveSupport::StringInquirer.new('production')application.rb에 추가 하면 다음과 rails s동일하게 작동합니다rails server -e production

module BlacklistAdmin
  class Application < Rails::Application

    config.encoding = "utf-8"
    Rails.env = ActiveSupport::StringInquirer.new('production')

    config.filter_parameters += [:password]
  end
end

2

"rails server -e production"에 의해 프로덕션 환경에서 레일 서버를 실행하는 좋은 방법은 아닙니다. 레일은 단일 스레드 응용 프로그램으로 실행되며 한 번에 하나의 HTTP 요청에만 응답 할 수 있기 때문입니다.

레일 프로덕션 환경에 대한 최고의 기사는 프로덕션 환경-레일스 3입니다.


3
링크 썩음 ... 웨이 백 머신에서 사용 가능 : link
rosuav

1

기본 서버의 경우 : rails s -e production

costum 서버 포트의 경우 : 레일 s -p [port] -e 생산, 예. 레일 s -p 3002 -e 생산


1

기본적으로 서버는 개발 환경에서 실행됩니다. $ rails s

프로덕션 환경에서 실행중인 경우 : $ rails s -e production또는$ RAILS_ENV=production rails s


0

environment.rb 파일에서 아래 작업을 완료했는지 확인하십시오.

ENV [ 'RAILS_ENV'] || = '생산'

응용 프로그램이 공유 호스팅 환경 또는 phushion passenger에서 실행되는 경우 .httaccess (공용 폴더 내)를 변경하고 모드를 프로덕션으로 설정해야 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.