Railsアプリケーションを本番環境に変更する


190

Railsアプリケーションをプロダクションモードで実行するように変更するにはどうすればよいですか?それを行うための設定ファイル、たとえばenvironment.rbはありますか?


2
2番目の回答の方が投票数が多いようです。問題がなければ、2番目の回答を簡単に確認して受け入れてください。将来の訪問者を助けるだけです。Thx :)
Evolve

回答:


73

ApacheとPhusion Passengerを使用してRails 4アプリをプロダクションモードで(段階的に)セットアップして実行する方法:

通常、Railsプロジェクトにrails sアクセスして、http://something.com: 3000でアプリの開発バージョンを取得できます。プロダクションモードは、設定が少し難しいです。

私はしばらくこれをいじり続けてきたので、初心者(自分のような)のためにこれを書くと思いました。インターネット全体に広がっているいくつかの小さな調整があり、これはより簡単かもしれないと考えました。

  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. Passengerのセットアップ後、/etc/httpd/conf/httpd.confファイルを編集してディレクトリ構造を反映したことを確認してください。DocumentRootがRailsプロジェクトの/ publicフォルダーを指すようにしたい場合httpd.confは、この種のdirを含むファイル内のどこでも/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のドキュメントに移行する必要があると思います。
ホワイトキャット

ApacheのようなWebコンテンツ配信を使用しない場合は、RAILS_ENV = productionの横にRAILS_SERVE_STATIC_FILES = 1を追加できます。これは、レールがすべてのファイルを提供するため、これを推奨しないことを意味します実際の生産状態...
3d0

351

これは今でしょう

rails server -e production

または、よりコンパクト

rails s -e production

Rails 3+プロジェクトで動作します。


33
またはショートバージョンrails s -e production
Pavel Nikolov 2012

2
Herokuのようなクラウドサービスはどうですか?server -e productionそれらを実行するには?
グリーン

クラウドサービスには、通常、環境を指定するオプションがありますが、それらのオプションproductionは常にデフォルトです。
James Billingham 2013

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

はるかに好ましい答えは、これはStackOverflowのドキュメントにそれをする必要があります。
dmanexe

61

Passengerで実行している場合、デフォルトではapache 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の提案が機能しない場合は、これをconfig / 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'あまりにもそれらに適用されますか?
グリーン

私は長い間このファイルを編集して忘れていました..思い出してくれてありがとう..多くの時間を節約しました
アグネス



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

Railsの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サーバーを「rails server -e production」で運用環境で実行するのは良い方法ではありません。これは、railsがシングルスレッドアプリケーションとして実行され、一度に1つのHTTPリクエストにしか応答できないためです。

Railsの本番環境に関する最良の記事は、本番環境-Rails 3です。


3
リンクの腐敗...ウェイバックマシンでも利用可能:リンク
rosuav

1

デフォルトのサーバーの場合:rails s -e production

Costumサーバーポートの場合:rails s -p [port] -e production、たとえば レールs -p 3002 -e生産


1

デフォルトでは、サーバーは開発環境で実行されます。 $ rails s

本番環境で実行している場合:$ rails s -e productionまたは$ RAILS_ENV=production rails s


0

environment.rbファイルで以下を実行したことを確認してください。

ENV ['RAILS_ENV'] || = 'プロダクション'

アプリケーションが共有ホスティング環境またはphushionパッセンジャーで実行されている場合、.httaccess(パブリックフォルダー内)を変更し、モードを本番に設定する必要がある場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.