web-dev-qa-db-fra.com

Comment changer le port par défaut d'une application Rails 4?

Je sais que je peux démarrer un serveur Rails sur un autre port via -p option. Mais j'aimerais configurer un autre port par application tant que je démarre webrick.

Des idées?

Cordialement Felix

24
GeorgieF

Solution rapide: ajouter à Rakefile

task :server do
  `bundle exec Rails s -p 8080`
end

Exécutez ensuite rake server

32
hawk

Ajoutez ceci à config/boot.rb:

require 'Rails/commands/server'

module DefaultOptions
  def default_options
    super.merge!(Port: 3001)
  end
end

Rails::Server.send(:prepend, DefaultOptions)

Remarque: Ruby> = 2.0 requis.

35
Yuriy Kharchenko

Option 1:

Vous pouvez lancer WEBrick comme ceci:

    Rails server -p 8080

Où 8080 est votre port. Si vous le souhaitez, vous pouvez jeter ceci dans un script bash pour plus de commodité.

Option 2:

Vous pouvez installer $ gem install foreman, et utilisez foreman pour démarrer votre serveur Web de production (par exemple Unicorn) comme défini dans votre Procfile comme ceci: $ foreman run web. Si Unicorn est votre serveur Web, vous pouvez spécifier le port dans votre fichier de configuration Unicorn (comme avec la plupart des choix de serveur). L'avantage de cette approche est non seulement que vous pouvez définir le port dans la configuration, mais que vous utilisez un environnement plus proche de la production.

21
William Denniss

Si vous mettez les options par défaut sur config/boot.rb puis tous les attributs de commande pour rake et Rails échoue (exemple: rake -T ou Rails g model user)! Alors, ajoutez ceci à bin/Rails après la ligne require_relative '../config/boot' et le code est exécuté uniquement pour la commande serveur Rails:

if ARGV.first == 's' || ARGV.first == 'server'
  require 'Rails/commands/server'
  module Rails
    class Server
      def default_options
        super.merge(Host:  '0.0.0.0', Port: 3000)
      end
    end
  end
end

Le bin/Rails fichier loks comme ceci:

#!/usr/bin/env Ruby
APP_PATH = File.expand_path('../../config/application',  __FILE__)
require_relative '../config/boot'

# Set default Host and port to Rails server
if ARGV.first == 's' || ARGV.first == 'server'
  require 'Rails/commands/server'
  module Rails
    class Server
      def default_options
        super.merge(Host:  '0.0.0.0', Port: 3000)
      end
    end
  end
end

require 'Rails/commands'
4
phlegx

Pour Rails 5.1:

# config/boot.rb

# ... existing code

require 'Rails/command'
require 'Rails/commands/server/server_command'

Rails::Command::ServerCommand.send(:remove_const, 'DEFAULT_PORT')
Rails::Command::ServerCommand.const_set('DEFAULT_PORT', 3333)
2
eyevan