Trên máy phát triển của tôi, tôi sử dụng cổng 10524. Vì vậy, tôi khởi động máy chủ của mình theo cách này:
rails s -p 10524
Có cách nào để thay đổi cổng mặc định thành 10524 vì vậy tôi sẽ không phải nối thêm cổng mỗi khi tôi khởi động máy chủ?
Trên máy phát triển của tôi, tôi sử dụng cổng 10524. Vì vậy, tôi khởi động máy chủ của mình theo cách này:
rails s -p 10524
Có cách nào để thay đổi cổng mặc định thành 10524 vì vậy tôi sẽ không phải nối thêm cổng mỗi khi tôi khởi động máy chủ?
Câu trả lời:
Đầu tiên - không chỉnh sửa bất cứ điều gì trong đường dẫn đá quý của bạn! Nó sẽ ảnh hưởng đến tất cả các dự án và bạn sẽ gặp nhiều vấn đề sau này ...
Trong dự án của bạn chỉnh sửa script/rails
theo cách này:
#!/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'
Nguyên tắc rất đơn giản - bạn đang vá khỉ người chạy máy chủ - vì vậy nó sẽ ảnh hưởng đến chỉ một dự án.
CẬP NHẬT : Có, tôi biết rằng có giải pháp đơn giản hơn với tập lệnh bash chứa:
#!/bin/bash
rails server -p 10524
nhưng giải pháp này có một nhược điểm nghiêm trọng - nó nhàm chán như địa ngục.
alias rs='rails server -p 10524'
require 'rails/commands'
SAU những thứ mới mà bạn dán vào. Nếu không, nó vẫn sẽ thử cổng 3000.
alias rs
Tôi muốn nối các phần sau vào 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
super
thay vì hack bí danh.
super
được sử dụng thay vì bí danh, nó gọi phương thức sai. Nó gọi ::Rack::Server
phiên bản default_options.
prepend
sử dụng một mô-đun ẩn danh thay vì sử dụng alias
. Điều này cho phép sử dụng sạch super
.
Rails::Server
được xác định trong ngữ cảnh khi không nên (ví dụ: chạy bảng điều khiển Rails). Vì vậy, tôi khuyên bạn nên đặt mã ở cuối application.rb
, bảo vệ với một if defined?(Rails::Server)
.
Kết hợp hai câu trả lời trước, cho Rails 4.0.4 (và có lẽ là), điều này đủ cho phần cuối của 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
, nếu không, nó vẫn trỏ đến cổng 3000.
Chúng tôi đang sử dụng Puma làm máy chủ web và dotenv để đặt các biến môi trường đang phát triển. Điều này có nghĩa là tôi có thể đặt biến môi trường cho PORT
và tham chiếu nó trong cấu hình Puma.
# .env
PORT=10524
# config/puma.rb
port ENV['PORT']
Tuy nhiên, bạn sẽ phải bắt đầu ứng dụng của mình foreman start
thay vìrails s
, nếu không cấu hình puma không được đọc đúng cách.
Tôi thích cách tiếp cận này vì cấu hình hoạt động theo cùng một cách trong phát triển và sản xuất, bạn chỉ cần thay đổi giá trị của cổng nếu cần thiết.
Lấy cảm hứng từ Radek và Spencer ... Trên Rails 4 (.0.2 - Ruby 2.1.0), tôi đã có thể thêm phần này vào 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
Tất cả các cấu hình khác trong default_options vẫn được đặt và các công tắc dòng lệnh vẫn ghi đè mặc định.
Giải pháp cho 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'
require File.dirname(__FILE__) + '/../config/boot'
trước require 'rack/handler'
để nó hoạt động.
Bạn có thể cài đặt $ gem install foreman
và sử dụng foreman để khởi động máy chủ của bạn như được định nghĩa trong Procfile
like của bạn :
web: bundle exec rails -p 10524
Bạn có thể kiểm tra foreman
tài liệu đá quý tại đây: https://github.com/ddollar/foreman để biết thêm thông tin
Lợi ích của phương pháp này không chỉ là bạn có thể dễ dàng thiết lập / thay đổi cổng trong cấu hình và nó không yêu cầu thêm mã mà còn có thể thêm các bước khác nhau trong trình Procfile
quản lý sẽ chạy cho bạn để bạn không ' Không phải đi qua chúng mỗi khi bạn muốn bắt đầu ứng dụng một cái gì đó như:
bundle: bundle install
web: bundle exec rails -p 10524
...
...
Chúc mừng
Tạo bí danh trong shell của bạn để ra lệnh với một cổng được chỉ định.
script/rails
. Cảm ơn vì điều đó.
config/puma.rb
nếu chạy máy chủ puma mặc định