Rails 3 sunucu varsayılan bağlantı noktası geliştirmede nasıl değiştirilir?


164

Geliştirme makinemde 10524 numaralı bağlantı noktasını kullanıyorum. Sunucumu şu şekilde başlatıyorum:

rails s -p 10524

Sunucuyu her başlattığımda bağlantı noktasını eklemek zorunda kalmamam için varsayılan bağlantı noktasını 10524 olarak değiştirmenin bir yolu var mı?


1
config/puma.rbvarsayılan puma sunucusu çalıştırılıyorsa basit cevap düzenleme
khaverim

Yanıtlar:


132

İlk olarak - mücevher yolunuzda hiçbir şeyi düzenlemeyin! Tüm projeleri etkileyecek ve daha sonra çok sorun yaşayacaksınız ...

Projenizde script/railsşu şekilde düzenleyin :

#!/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'

Prensip basit - sunucu koşucusunu maymun yama yapıyorsunuz - bu yüzden sadece bir projeyi etkileyecek.

GÜNCELLEME : Evet, bash betiği ile daha basit bir çözüm olduğunu biliyorum:

#!/bin/bash
rails server -p 10524

ancak bu çözümün ciddi bir dezavantajı var - cehennem kadar sıkıcı.


14
Ya da bir takma ad! alias rs='rails server -p 10524'
trisweb

2
require 'rails/commands'Yapıştırdığınız yeni şeyleri SONRASI yerleştirdiğinizden emin olun . Aksi halde 3000
numaralı

benim için çalışmıyor, hala başlıyor: 3000. Howver @Spencer çözümü (bu sayfada) çalışıyor
Roman

Benim için bir örnekte çalıştım ama diğerinde değil. Ne zaman kendi komut dosyası ve raylar dosya oluşturmak zorunda kaldım -> büyük bir başarı değil. Muhtemelen rayların betiğin bitip bitmediği ile ilgilidir?
gards

@trisweb Nasıl yaratılacağını açıklayabilir misinizalias rs
Selvamani

131

Aşağıdakileri eklemek istiyorum 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
superTakma ad kesmek yerine kullanın .
Nowaker

2
Ne yazık ki, supertakma ad yerine kullanılırsa yanlış yöntemi çağırır. ::Rack::ServerDefault_options sürümünü çağırır .
codingFoo

3
Ruby 2.0 prependile kullanmak yerine anonim bir modül kullanabilirsiniz alias. Bu temiz bir kullanım sağlar super.
exbinary

2
Bu yanıt, Rails::Serverolmaması gerektiğinde bağlamlarda tanımlanmasına neden olur (örneğin, Rails konsolunu çalıştırmak). Bu yüzden kodu sonuna kadar application.rbkoymanızı öneririm if defined?(Rails::Server).
XåpplI'-I0llwlg'I -

29

Senin için bir fikir daha. -P ile rails sunucusunu çağıran bir komisyon görevi oluşturun.

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

sonra rake startyerine ararails server


16

Önceki iki cevabı birleştirerek, Rails 4.0.4 (ve muhtemelen yukarı) için bu, aşağıdakilerin sonunda yeterlidir config/boot.rb:

require 'rails/commands/server'

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

Çalışan uygulamada bu seçeneği nasıl alabilirim? Özellikle, ayarlamak istiyorum config.action_mailer.default_url_options, aksi takdirde hala 3000
numaralı

Burada bununla ilgili bir soru ekledim: stackoverflow.com/questions/29431315/…
Joshua Muheim

7

Puma'yı bir web sunucusu olarak ve dotenv'i geliştirmede ortam değişkenlerini ayarlamak için kullanıyoruz . Bu, bir ortam değişkeni ayarlayabildiğim PORTve Puma yapılandırmasında başvurabileceğim anlamına gelir .

# .env
PORT=10524


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

Ancak, uygulamanızı foreman startbunun yerine başlatmanız gerekir rails s, aksi takdirde puma config düzgün okunmaz.

Bu yaklaşımı seviyorum çünkü konfigürasyon geliştirme ve üretimde aynı şekilde çalışıyor, sadece gerekirse portun değerini değiştiriyorsunuz.


4

Radek ve Spencer'dan esinlenerek ... On Rails 4 (.0.2 - Ruby 2.1.0), bunu config / boot.rb dosyasına ekleyebildim :

# 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 içindeki diğer tüm yapılandırmalar hala ayarlanmıştır ve komut satırı anahtarları yine de varsayılanları geçersiz kılar.


3

Rails 2.3 için çözüm - 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'

Teşekkürler! Buraya raylarla bir çözüm aramaya geldim 2.3.18 :-)
Prakash Murthy

Ben taşımak zorunda require File.dirname(__FILE__) + '/../config/boot'önce require 'rack/handler'işe bunun için.
Prakash Murthy

1

$ gem install foremanSunucunuzu aşağıdaki gibi tanımlandığı gibi başlatmak için kurabilir ve ustabaşı kullanabilirsiniz Procfile:

web: bundle exec rails -p 10524

foremanGem dokümanlarını buradan kontrol edebilirsiniz : https://github.com/ddollar/foreman daha fazla bilgi için

Bu yaklaşımın yararı, yapılandırmadaki bağlantı noktasını kolayca ayarlayabilmeniz / değiştirebilmeniz ve eklenecek fazla kod gerektirmemesidir, aynı zamanda Procfilebu ustabaşı sizin için çalışacak farklı adımlar da ekleyebilirsiniz. t Her uygulama başlatmak istediğinizde onları olsa gitmek zorunda gibi bir şey:

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

Şerefe


-4

Belirli bir bağlantı noktasına sahip komut için kabuğunuzda takma ad oluşturun.


12
mücevher yolunda dosyaları düzenlemek ... şey, sadece cesur için. Mücevher güncellemelerinden kurtulamayacak, daha fazla bilgisayarda çalışmayacak, vb. Gerçekten tavsiye etmem
Radek Paviensky

2
Haklısın. Çözümünüz çok daha iyi. Bunu geçersiz kılabileceğimi bilmiyordum script/rails. Bunun için teşekkürler.
Casual Coder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.