web-dev-qa-db-ja.com

Railsアプリケーションを本番に変更します

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

187
Adler Medrado

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

通常、RailsプロジェクトRails sを入力し、アプリの開発バージョンを http://something.com:30 で取得できます。プロダクションモードの設定は少し複雑です。

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

  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 project/publicフォルダーにポイントしたいこの種のディレクトリを持つhttpd.confファイル内の任意の場所:/var/www/html/your_application/public needs更新されるか、すべてが非常にイライラします。これを十分に強調することはできません。

  3. サーバー(または少なくともApache-service httpd restart)を再起動します

  4. Railsプロジェクトフォルダー/var/www/html/your_applicationを入力し、rake db:migrateで移行を開始します。後でテーブルを追加する場合でも、データベーステーブルが存在することを確認してください(これも手順1の一部です)。

  5. Rails_ENV=production rake secret-これにより、config/secrets.ymlに追加できるsecret_keyが作成されます。実行するために、これをconfig/secrets.ymlにcanコピー/ペーストしますが、これはしないことをお勧めします。個人的には、他のすべてが機能していることを確認するためにこのステップを実行し、それを元に戻し、後でソースします。

  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のようなエントリがあるかどうかを確認します

恐ろしい何かを見逃したかもしれませんが、これは過去に私にとってはうまくいきました。

67
etusm

これは今

Rails server -e production

または、よりコンパクト

Rails s -e production

Rails 3+プロジェクトで機能します。

350
BandsOnABudget

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定数を実際にオーバーライドするのは、おそらく設定されたままではないため、おそらく最後の手段です( 別の回答 を参照)

61
Dan McNevin

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'
54
Pete

環境変数Rails_ENVproductionに変更します。

19
mipadi
$> export Rails_ENV=production
19
Evolve

環境をスクリプト/サーバーに渡すこともできます。

$ script/server -e production
18
foz
Rails s -e production

これにより、Rails_ENV = 'production'でサーバーが実行されます。

これとは別に、production.rbでアセットのパスを設定する必要があります

config.serve_static_assets = true

これがないと、アセットはロードされません。

12
prasann
Rails_ENV=production Rails s

OR

Rails s -e production

デフォルトの環境は開発です。

6
puneet18

他の人が投稿したように:Rails server -e production

または、私の個人的な好み:Rails_ENV=productionRails s

5
alex1sz

In Rails

Application.rbおよびRails sRails.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
2
RSK

「Rails server -e production」によって実稼働環境でRailsサーバーを実行するのは良い方法ではありません。なぜなら、Railsはシングルスレッドアプリケーションとして実行され、一度に1つのHTTP要求。

Railsの実稼働環境に関する最良の記事は 実稼働環境-Rails です。

2

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

カスタムサーバーポートの場合:Rails s -p [port] -e production、eg。 Rails s -p 3002 -e production

1
user3786185

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

実稼働環境で実行している場合:$ Rails s -e productionまたは$ Rails_ENV=production Rails s

1
Pankaj Dhote

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

ENV ['Rails_ENV'] || = '生産'

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

0
Rakesh