Railsアプリケーションを本番モードで実行するように変更するにはどうすればよいですか?それを行うための設定ファイル、たとえばenvironment.rbはありますか?
15 に答える
これは今
rails server -e production
または、よりコンパクト
rails s -e production
Rails3+プロジェクトで機能します。
ApacheとPhusionPassengerを使用してRails4アプリを本番モードで(ステップバイステップで)セットアップして実行する方法:
通常、Railsプロジェクトに参加して、 http://something.com:rails s
3000でアプリの開発バージョンを入手できます。本番モードは設定が少し難しいです。
私はしばらくこれをいじっていたので、初心者(私など)のためにこれを書くと思いました。インターネット全体に広がっているいくつかの小さな調整があり、これはもっと簡単かもしれないと考えました。
サーバーのコアセットアップについては、このガイドを参照してください(CentOS 6、ただしほぼすべてのLinuxフレーバーに適用されるはずです):https ://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-with-apache-and-passenger-on-centos-6
Passengerを設定した後
/etc/httpd/conf/httpd.conf
、ディレクトリ構造を反映するようにファイルを編集したことを絶対に確認してください。DocumentRootをRailsプロジェクト/publicフォルダーにポイントする必要がありhttpd.conf
ます。この種のディレクトリを持つファイルの任意の場所:/var/www/html/your_application/public
更新する必要があります。そうしないと、すべてが非常にイライラします。私はこれを十分に強調することはできません。サーバーを再起動します(または少なくともApacheを再起動します-
service httpd restart
)Railsプロジェクトフォルダーに入り
/var/www/html/your_application
、で移行を開始しrake db:migrate
ます。後でテーブルを追加する予定がある場合でも、データベーステーブルが存在することを確認してください(これも手順1の一部です)。RAILS_ENV=production rake secret
-これにより、に追加できるsecret_keyが作成されますconfig/secrets.yml
。これをコピーしてconfig/secrets.ymlに貼り付けて実行することができますが、これは行わないことをお勧めします。個人的には、この手順を実行して他のすべてが機能していることを確認してから、元に戻して後で調達します。RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
静的アセットを提供している場合。これにより、js、css、画像ファイルが/public
フォルダーにプッシュされます。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
私は恐らく凶悪な何かを逃したかもしれませんが、これは過去に私のために働いてきました。
Passengerで実行している場合、デフォルトでは、apacheconfで本番環境で実行されます。
<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定数を実際にオーバーライドすることは、おそらく設定されたままになることはないので、おそらく最後の手段になるはずです(私がそれについて与えた別の回答を参照してください)
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'
環境変数RAILS_ENV
をに変更しますproduction
。
$> export RAILS_ENV=production
スクリプト/サーバーに環境を渡すこともできます。
$ script/server -e production
rails s -e production
RAILS_ENV
これにより、 =でサーバーが実行されます'production'
。
これとは別に、アセットパスをで設定する必要がありますproduction.rb
config.serve_static_assets = true
これがないと、アセットは読み込まれません。
RAILS_ENV=production rails s
また
rails s -e production
デフォルトの環境は開発です。
他の人が投稿したように:rails server -e production
または、私の個人的なお気に入り: RAILS_ENV=production
rails s
Rails3で
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
「railsserver-eproduction」によって本番環境でRailsサーバーを実行するのは良い方法ではありません。これは、Railsがシングルスレッドアプリケーションとして実行され、一度に1つのHTTPリクエストにしか応答できないためです。
Railsの本番環境に関する最高の記事は、本番環境-Rails3です。
デフォルトサーバーの場合:rails s -e product
コスタムサーバーポートの場合:rails s -p [port] -e product、例:rails s -p3002-e生産
デフォルトでは、サーバーは開発環境で実行されます。$ rails s
実稼働環境で実行している場合:$ rails s -e production
または$ RAILS_ENV=production rails s
以下のenvironment.rbファイルが完了していることを確認してください。
ENV ['RAILS_ENV']||='プロダクション'
アプリケーションが共有ホスティング環境またはphushionpassengerで実行されている場合は、.httaccess(パブリックフォルダー内)を変更し、モードを本番環境に設定する必要がある場合があります。