কীভাবে রেল 3 সার্ভারের ডিফল্ট পোর্টটি ডেভেলোমেন্টে পরিবর্তন করবেন?


164

আমার ডেভলপমেন্ট মেশিনে, আমি পোর্ট 10524 ব্যবহার করি So সুতরাং আমি আমার সার্ভারটি এইভাবে শুরু করি:

rails s -p 10524

ডিফল্ট পোর্টকে 10524 এ পরিবর্তন করার কোনও উপায় আছে যাতে প্রতিবার সার্ভার চালু করার পরে আমাকে পোর্ট যুক্ত করতে হবে না?


1
সাধারণ উত্তরটি সম্পাদনা হয় config/puma.rbডিফল্ট পুমা সার্ভার
চললে

উত্তর:


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'
ত্রিসউব

2
লাগাতে ভুলবেন না require 'rails/commands'নতুন জিনিস নিয়ে আপনি পেস্ট পরে অন্যথায় এটি এখনও বন্দর 3000. চেষ্টা করবে।
CJBrew

আমার জন্য কাজ করে না, এখনও: 3000 থেকে শুরু হয়। যাইহোক @ স্পেন্সার সমাধান (এই পৃষ্ঠায়) কাজ করে
রোমান

আমার জন্য এক উদাহরণে কাজ করেছেন তবে অন্য নয়। যখন আমাকে নিজের স্ক্রিপ্ট ফোল্ডার এবং রেল ফাইল তৈরি করতে হয়েছিল -> দুর্দান্ত সাফল্য নয়। সম্ভবত স্ক্রিপ্টটি রেল বন্ধ হয়ে চলছে বা চলছে না এর সাথে কি করতে হবে?
গার্ডগুলি

@ ত্রিসুয়েব আপনি কীভাবে তৈরি করবেন তা ব্যাখ্যা করতে পারেন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ওরফে হ্যাকের পরিবর্তে ব্যবহার করুন ।
এখনকার

2
দুর্ভাগ্যক্রমে, যদি superওরফেটির পরিবর্তে ব্যবহার করা হয়, তবে এটি ভুল পদ্ধতি বলে। এটি ::Rack::Serverডিফল্ট_অপশনগুলির সংস্করণটিকে কল করে ।
কোডিংফু

3
রুবি ২.০ দিয়ে আপনি prependব্যবহারের পরিবর্তে একটি বেনামে মডিউল রাখতে পারেন alias। এটি একটি পরিষ্কার ব্যবহার করতে পারবেন super
এক্সনারি 21

2
এই উত্তরটি প্রাসঙ্গিক Rails::Serverক্ষেত্রে সংজ্ঞায়িত হয়ে উঠবে যখন এটি হওয়া উচিত নয় (উদাহরণস্বরূপ রেলস কনসোল চালানো)। সুতরাং আমি কোডটি শেষের দিকে রাখার পরামর্শ দিচ্ছি, এটি application.rbদিয়ে রক্ষা করুন if defined?(Rails::Server)
XåpplI'-I0llwlg'I -

29

আপনার জন্য আরও একটি ধারণা। একটি রেক টাস্ক তৈরি করুন যা -পি দিয়ে রেল সার্ভারকে কল করে।

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/...
জশুয়া Muheim

7

আমরা পুমাকে একটি ওয়েব সার্ভার হিসাবে এবং ডোটেনভকে বিকাশের পরিবেশগত পরিবর্তনশীল সেট করতে ব্যবহার করছি । এর অর্থ আমি এর জন্য পরিবেশের পরিবর্তনশীল সেট করতে PORTপারি এবং এটি পুমা কনফিগে রেফারেন্স করতে পারি।

# .env
PORT=10524


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

তবে আপনাকে এর foreman startপরিবর্তে আপনার অ্যাপ্লিকেশনটি শুরু করতে হবে rails s, অন্যথায় পুমা কনফিগারেশন সঠিকভাবে পড়তে পারে না।

আমি এই পদ্ধতির পছন্দ করি কারণ কনফিগারেশনটি একইভাবে উন্নয়ন এবং উত্পাদনে কাজ করে, প্রয়োজনে আপনি কেবল বন্দরটির মান পরিবর্তন করেন।


4

রাদেক এবং স্পেনসারের দ্বারা অনুপ্রাণিত হয়ে ... রেল 4 (.0.2 - রুবি ২.১.০) এ, আমি এটি কনফিগার / বুট.আরবিতে যুক্ত করতে সক্ষম হয়েছি :

# 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

ডিফল্ট_অপশনগুলিতে সমস্ত অন্যান্য কনফিগারেশন এখনও সেট করা আছে এবং কমান্ড-লাইন স্যুইচগুলি এখনও ডিফল্টকে ওভাররাইড করে।


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'

ধন্যবাদ! আমি এখানে রেল ২.৩.১৮ :-) সহ একটি সমাধান খুঁজছি
প্রকাশ মুর্তি

এটি কাজ 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
আপনার মণি পথে ফাইল সম্পাদনা করা ... ভাল, কেবলমাত্র সাহসী জন্য। এটা তোলে মণি আপডেট বেঁচে থাকতে হবে, এটি আরও কম্পিউটারগুলি জুড়ে কাজ করবে না, ইত্যাদি আমি সত্যিই এটা না করার পরামর্শ দিচ্ছি
Radek Paviensky

2
তুমি ঠিক. আপনার সমাধানটি আরও ভাল। আমি জানতাম না যে আমি এটিকে ওভাররাইড করতে পারি script/rails। তার জন্য ধন্যবাদ.
নৈমিত্তিক কোডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.