Railsアプリケーションを実稼働モードで実行するように変更するにはどうすればよいですか?それを行うための設定ファイル、たとえばenvironment.rbはありますか?
ApacheとPhusion Passengerを使用して、プロダクションモードでRails 4アプリをセットアップして実行する方法(ステップバイステップ):
通常、RailsプロジェクトRails s
を入力し、アプリの開発バージョンを http://something.com:30 で取得できます。プロダクションモードの設定は少し複雑です。
私はしばらくこれをいじり続けてきたので、私はこれを初心者(自分のような)のために書き上げると思った。インターネット全体に広がっているいくつかの小さな調整があり、これがより簡単であるかもしれないと考えました。
サーバーのコアセットアップについては、このガイドを参照してください(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 project/publicフォルダーにポイントしたいこの種のディレクトリを持つhttpd.conf
ファイル内の任意の場所:/var/www/html/your_application/public
needs更新されるか、すべてが非常にイライラします。これを十分に強調することはできません。
サーバー(または少なくともApache-service httpd restart
)を再起動します
Railsプロジェクトフォルダー/var/www/html/your_application
を入力し、rake db:migrate
で移行を開始します。後でテーブルを追加する場合でも、データベーステーブルが存在することを確認してください(これも手順1の一部です)。
Rails_ENV=production rake secret
-これにより、config/secrets.yml
に追加できるsecret_keyが作成されます。実行するために、これをconfig/secrets.ymlにcanコピー/ペーストしますが、これはしないことをお勧めします。個人的には、他のすべてが機能していることを確認するためにこのステップを実行し、それを元に戻し、後でソースします。
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
のようなエントリがあるかどうかを確認します
恐ろしい何かを見逃したかもしれませんが、これは過去に私にとってはうまくいきました。
これは今
Rails server -e production
または、よりコンパクト
Rails s -e production
Rails 3+プロジェクトで機能します。
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定数を実際にオーバーライドするのは、おそらく設定されたままではないため、おそらく最後の手段です( 別の回答 を参照)
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
OR
Rails s -e production
デフォルトの環境は開発です。
他の人が投稿したように:Rails server -e production
または、私の個人的な好み:Rails_ENV=production
Rails s
In Rails
Application.rbおよびRails s
にRails.env = ActiveSupport::StringInquirer.new('production')
を追加すると、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
「Rails server -e production」によって実稼働環境でRailsサーバーを実行するのは良い方法ではありません。なぜなら、Railsはシングルスレッドアプリケーションとして実行され、一度に1つのHTTP要求。
Railsの実稼働環境に関する最良の記事は 実稼働環境-Rails です。
デフォルトサーバーの場合:Rails s -e production
カスタムサーバーポートの場合:Rails s -p [port] -e production、eg。 Rails s -p 3002 -e production
デフォルトでは、サーバーは開発環境で実行されます:$ Rails s
実稼働環境で実行している場合:$ Rails s -e production
または$ Rails_ENV=production Rails s
Environment.rbファイルで以下を行ったことを確認してください。
ENV ['Rails_ENV'] || = '生産'
アプリケーションを共有ホスティング環境またはphushionパッセンジャーで実行する場合、.httaccess(パブリックフォルダー内)で変更を行い、モードを実稼働として設定する必要があります。