रेल-सर्वर के पोर्ट को डिवेलोमेंट में कैसे बदलें?


164

मेरी विकास मशीन पर, मैं पोर्ट 10524 का उपयोग करता हूं। इसलिए मैं अपना सर्वर इस तरह से शुरू करता हूं:

rails s -p 10524

क्या डिफ़ॉल्ट पोर्ट को 10524 में बदलने का कोई तरीका है, इसलिए मुझे सर्वर शुरू करने के लिए हर बार पोर्ट को अपग्रेड नहीं करना होगा?


1
config/puma.rbयदि डिफॉल्ट प्यूमा सर्वर चल रहा है तो सरल उत्तर संपादित किया गया है
khaverim

जवाबों:


132

पहला - अपने मणि पथ में कुछ भी संपादित न करें! यह सभी परियोजनाओं को प्रभावित करेगा, और आपको बाद में बहुत सारी समस्याएं होंगी ...

अपनी परियोजना में script/railsइस तरह से संपादित करें:

#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.

APP_PATH = File.expand_path('../../config/application',  __FILE__)
require File.expand_path('../../config/boot',  __FILE__)

# THIS IS NEW:
require "rails/commands/server"
module Rails
  class Server
    def default_options
      super.merge({
        :Port        => 10524,
        :environment => (ENV['RAILS_ENV'] || "development").dup,
        :daemonize   => false,
        :debugger    => false,
        :pid         => File.expand_path("tmp/pids/server.pid"),
        :config      => File.expand_path("config.ru")
      })
    end
  end
end
# END OF CHANGE
require 'rails/commands'

सिद्धांत सरल है - आप सर्वर धावक बंदर-पैचिंग कर रहे हैं - इसलिए यह सिर्फ एक परियोजना को प्रभावित करेगा।

अद्यतन : हाँ, मुझे पता है कि बैश स्क्रिप्ट के साथ सरल समाधान है:

#!/bin/bash
rails server -p 10524

लेकिन इस समाधान में एक गंभीर खामी है - यह नरक के रूप में उबाऊ है।


14
या एक उपनाम भी! alias rs='rails server -p 10524'
trisweb

2
आपके द्वारा डाले गए require 'rails/commands'नए सामान को सुरक्षित रखना सुनिश्चित करें । अन्यथा यह अभी भी 3000 पोर्ट की कोशिश करेगा।
CJBrew

मेरे लिए काम नहीं करता है, अभी भी शुरू होता है: 3000। Howver @Spencer सॉल्यूशन (इस पेज पर) काम करता है
रोमन

मेरे लिए एक उदाहरण में काम किया लेकिन दूसरे में नहीं। जब मुझे अपनी स्क्रिप्ट फ़ोल्डर और रेल फ़ाइल बनानी थी -> बड़ी सफलता नहीं मिली। शायद पटकथा से दूर चल रहा है या नहीं या नहीं, इसके साथ क्या करना है?
वार्ड

@trisweb क्या आप बता सकते हैं कि कैसे बनाया जाएalias rs
सेल्वमनी

131

मैं निम्नलिखित को जोड़ना पसंद करता हूं config/boot.rb:

require 'rails/commands/server'

module Rails
  class Server
    alias :default_options_alias :default_options
    def default_options
      default_options_alias.merge!(:Port => 3333)
    end    
  end
end

8
superउर्फ हैक के बजाय का उपयोग करें ।
18

2
दुर्भाग्य से, अगर superउपनाम के बजाय इसका उपयोग किया जाता है , तो यह गलत तरीके से कॉल करता है। यह ::Rack::Serverdefault_options के संस्करण को कॉल करता है ।
कोडिंगफू

3
रूबी 2.0 के साथ आप prependउपयोग करने के बजाय एक अनाम मॉड्यूल बना सकते हैं alias। यह एक स्वच्छ उपयोग की अनुमति देता है super
21

2
Rails::Serverजब यह नहीं होना चाहिए (जैसे रेल कंसोल चल रहा है) तो यह उत्तर संदर्भों में परिभाषित हो जाएगा। तो मैं application.rbएक के साथ रखवाली के अंत में कोड डालने की सलाह देता हूं if defined?(Rails::Server)
XåpplI'-I0llwlg'I -

29

आपके लिए एक और विचार। एक रेक कार्य बनाएं जो रेल सर्वर को -p के साथ कॉल करता है।

task "start" => :environment do
  system 'rails server -p 3001'
end

rake startइसके बजाय कॉल करेंrails server


16

रेल 4.0.4 (और ऊपर, संभवतः) के लिए दो पिछले उत्तरों को मिलाकर, यह अंत में आता है config/boot.rb:

require 'rails/commands/server'

module Rails
  class Server
    def default_options
      super.merge({Port: 10524})
    end
  end
end

मैं चल रहे ऐप में इस विकल्प को कैसे प्राप्त कर सकता हूं? विशेष रूप से, मैं सेट करना चाहता हूं config.action_mailer.default_url_options, अन्यथा यह अभी भी 3000 बंदरगाह की ओर इशारा कर रहा है।
जोशुआ मुहीम

मैंने इससे संबंधित एक प्रश्न यहां जोड़ा: stackoverflow.com/questions/29431315/…
जोशुआ मुहीम

7

हम Puma का उपयोग एक वेब सर्वर के रूप में कर रहे हैं, और dotenv विकास में पर्यावरण चर सेट करने के लिए। इसका मतलब है कि मैं इसके लिए एक पर्यावरण चर सेट कर सकता हूं PORTऔर इसे प्यूमा कॉन्फिगरेशन में संदर्भित कर सकता हूं ।

# .env
PORT=10524


# config/puma.rb
port ENV['PORT']

हालाँकि, आपको foreman startइसके बजाय अपना ऐप शुरू करना होगाrails s , अन्यथा प्यूमा कॉन्फिगरेशन ठीक से पढ़ने को नहीं मिलता है।

मुझे यह दृष्टिकोण पसंद है क्योंकि कॉन्फ़िगरेशन विकास और उत्पादन में उसी तरह काम करता है, आप बस पोर्ट के मूल्य को बदलते हैं यदि आवश्यक हो।


4

राडेक और स्पेंसर से प्रेरित ... रेल्स 4 पर (.0.2 - रूबी 2.1.0), मैं इसे कॉन्फ़िगर करने में सक्षम था / boot.rb :

# config/boot.rb

# ...existing code

require 'rails/commands/server'

module Rails
  # Override default development
  # Server port
  class Server
    def default_options
      super.merge(Port: 3100)
    end
  end
end

Default_options में सभी अन्य कॉन्फ़िगरेशन अभी भी सेट हैं, और कमांड-लाइन स्विच अभी भी चूक को ओवरराइड करते हैं।


3

रेल 2.3 के लिए समाधान - script/server:

#!/usr/bin/env ruby
require 'rack/handler'
module Rack::Handler
  class << WEBrick
    alias_method :old_run, :run
  end

  class WEBrick
    def self.run(app, options={})
      options[:Port] = 3010 if options[:Port] == 3000
      old_run(app, options)
    end
  end
end

require File.dirname(__FILE__) + '/../config/boot'
require 'commands/server'

धन्यवाद! मैं 2.3.18 :-) रेल के साथ समाधान की तलाश में यहां आया था
प्रकाश मूर्ति

मुझे इसके लिए require File.dirname(__FILE__) + '/../config/boot'पहले require 'rack/handler'काम करना पड़ा ।
प्रकाश मूर्ति

1

आप $ gem install foremanअपने सर्वर को अपनी Procfileतरह से परिभाषित करने के लिए फोरमैन को स्थापित और उपयोग कर सकते हैं:

web: bundle exec rails -p 10524

आप foremanयहां रत्न डॉक्स की जांच कर सकते हैं: https://github.com/ddollar/foreman अधिक जानकारी के लिए

इस दृष्टिकोण का लाभ न केवल आप कॉन्फ़िगर में पोर्ट को आसानी से सेट / बदल सकते हैं और इसे जोड़ने के लिए बहुत कोड की आवश्यकता नहीं है, लेकिन आप Procfileउस फ़ोरमैन में विभिन्न चरणों को भी जोड़ सकते हैं जो आपके लिए चलेगा ताकि आप डॉन न करें ' टी के लिए जाना है, हालांकि उन्हें हर बार जब आप आवेदन शुरू करना चाहते हैं जैसे कुछ:

bundle: bundle install
web: bundle exec rails -p 10524
...
...

चियर्स


-4

एक निर्दिष्ट पोर्ट के साथ कमांड के लिए अपने शेल में उपनाम बनाएं।


12
अपने मणि पथ में फ़ाइलों को संपादित करना ... ठीक है, केवल सबसे बहादुर के लिए। यह मणि अद्यतन से नहीं बचेगा, यह अधिक कंप्यूटरों पर काम नहीं करेगा, आदि। मैं वास्तव में इसकी सिफारिश नहीं
करूंगा

2
तुम सही हो। आपका समाधान काफी बेहतर है। मुझे नहीं पता था, कि मैं इसे ओवरराइड कर सकता हूं script/rails। उसके लिए धन्यवाद।
कैजुअल कोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.