Bagaimana cara mengubah port default server Rails 3 dalam develoment?

164

Pada mesin pengembangan saya, saya menggunakan port 10524. Jadi saya memulai server saya dengan cara ini:

rails s -p 10524

Apakah ada cara untuk mengubah port default ke 10524 jadi saya tidak perlu menambahkan port setiap kali saya memulai server?

Pierre Olivier Martel
sumber
1
jawaban sederhana adalah edit config/puma.rbjika menjalankan server puma default
khaverim

Jawaban:

132

Pertama - jangan edit apa pun di jalur permata Anda! Ini akan memengaruhi semua proyek, dan Anda akan memiliki banyak masalah nanti ...

Dalam proyek Anda edit script/railsdengan cara ini:

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

Prinsipnya sederhana - Anda menambal pelari server - sehingga hanya mempengaruhi satu proyek.

UPDATE : Ya, saya tahu bahwa ada solusi yang lebih sederhana dengan skrip bash yang mengandung:

#!/bin/bash
rails server -p 10524

tetapi solusi ini memiliki kelemahan serius - itu membosankan sekali.

Radek Paviensky
sumber
14
Atau bahkan alias! alias rs='rails server -p 10524'
trisweb
2
Pastikan untuk meletakkan require 'rails/commands'SETELAH barang baru yang Anda tempel. Jika tidak, ia masih akan mencoba port 3000.
CJBrew
tidak bekerja untuk saya, masih dimulai pada: 3000. Solusi Howver @Spencer (di halaman ini) berfungsi
Roman
Bekerja dalam satu contoh untuk saya tetapi tidak pada yang lain. Ketika saya harus membuat folder skrip dan file rel saya sendiri -> tidak terlalu sukses. Mungkin ada hubungannya dengan apakah rel berjalan dari skrip atau tidak?
Gards
@trisweb Bisakah Anda menjelaskan cara membuatalias rs
Selvamani
131

Saya ingin menambahkan yang berikut ini ke 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
Spencer
sumber
8
Gunakan superalih-alih alias retas.
Sekarang
2
Sayangnya, jika superdigunakan sebagai ganti alias, itu memanggil metode yang salah. Ini memanggil ::Rack::Serverversi default_options.
codingFoo
3
Dengan ruby ​​2.0 Anda bisa prependmenggunakan modul anonim alih-alih menggunakan alias. Ini memungkinkan penggunaan bersih super.
exbinary
2
Jawaban ini akan menyebabkan Rails::Servermenjadi didefinisikan dalam konteks ketika seharusnya tidak (misalnya menjalankan konsol Rails). Jadi saya sarankan meletakkan kode di akhir application.rb, dijaga dengan if defined?(Rails::Server).
XåpplI'-I0llwlg'I -
29

Satu lagi ide untukmu. Buat tugas menyapu yang memanggil server rel dengan -p.

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

lalu panggil rake startalih-alihrails server

Ross
sumber
16

Menggabungkan dua jawaban sebelumnya, untuk Rails 4.0.4 (dan lebih tinggi, mungkin), ini sudah cukup di akhir config/boot.rb:

require 'rails/commands/server'

module Rails
  class Server
    def default_options
      super.merge({Port: 10524})
    end
  end
end
Thilo
sumber
Bagaimana saya bisa mengambil opsi ini di aplikasi yang berjalan? Secara khusus, saya ingin mengatur config.action_mailer.default_url_options, kalau tidak itu masih menunjuk ke port 3000.
Joshua Muheim
Saya menambahkan pertanyaan terkait dengan ini di sini: stackoverflow.com/questions/29431315/...
Joshua Muheim
7

Kami menggunakan Puma sebagai server web, dan dotenv untuk mengatur variabel lingkungan dalam pengembangan. Ini berarti saya dapat mengatur variabel lingkungan untuk PORT, dan referensi dalam konfigurasi Puma.

# .env
PORT=10524


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

Namun, Anda harus memulai aplikasi foreman startalih - alihrails s , jika tidak konfigurasi puma tidak dapat dibaca dengan benar.

Saya suka pendekatan ini karena konfigurasi bekerja dengan cara yang sama dalam pengembangan dan produksi, Anda hanya perlu mengubah nilai port jika perlu.

deklan
sumber
4

Terinspirasi oleh Radek dan Spencer ... On Rails 4 (.0.2 - Ruby 2.1.0), saya dapat menambahkan ini ke config / 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

Semua konfigurasi lain di default_options masih diatur, dan switch-line perintah masih mengesampingkan default.

TuK
sumber
3

Solusi untuk Rails 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'
Pembuat sekarang
sumber
Terima kasih! Saya datang ke sini mencari solusi dengan rel 2.3.18 :-)
Prakash Murthy
Saya memang harus memindahkan require File.dirname(__FILE__) + '/../config/boot'sebelumnya require 'rack/handler'agar bisa berfungsi.
Prakash Murthy
1

Anda dapat menginstal $ gem install foreman, dan menggunakan mandor untuk memulai server Anda seperti yang didefinisikan dalam Procfilesuka Anda :

web: bundle exec rails -p 10524

Anda dapat memeriksa foremandokumen permata di sini: https://github.com/ddollar/foreman untuk info lebih lanjut

Manfaat dari pendekatan ini adalah Anda tidak hanya dapat mengatur / mengubah port di konfigurasi dengan mudah dan tidak membutuhkan banyak kode untuk ditambahkan, tetapi Anda juga dapat menambahkan langkah-langkah berbeda di Procfilemana mandor akan berjalan untuk Anda sehingga Anda tidak perlu tidak harus pergi meskipun mereka setiap kali Anda ingin memulai aplikasi Anda sesuatu seperti:

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

Bersulang

Mark Jad
sumber
-4

Buat alias di shell Anda untuk perintah dengan port yang ditentukan.

Coder Kasual
sumber
12
mengedit file di jalur gem Anda adalah ... well, hanya untuk yang paling berani. Itu tidak akan bertahan pembaruan permata, itu tidak akan bekerja di lebih banyak komputer, dll. Saya benar-benar tidak akan merekomendasikan hal itu
Radek Paviensky
2
Kamu benar. Solusi Anda jauh lebih baik. Saya tidak tahu, bahwa saya bisa menimpanya script/rails. Terima kasih untuk itu.
Casual Coder