Setelah memutakhirkan aplikasi rel tim kami ke 4.2, seperti yang disebutkan dalam catatan rilis , ip default yang rails server
mengikat ke diubah menjadi localhost
dari 0.0.0.0
.
Kami mengembangkan dengan Vagrant, dan ingin server pengembangan dapat diakses langsung dari browser di mesin host.
Alih-alih mengetik rails s -b 0.0.0.0
setiap saat mulai sekarang, saya bertanya-tanya apakah ada solusi yang lebih elegan, sehingga kita masih dapat menggunakan sth sesederhana rails s
untuk memulai server. Mungkin:
- file konfigurasi
rails s
berbunyi di mana saya dapat mengubah ip pengikatan default (tanpa menggunakan-c
) - port forward dengan gelandangan (mencoba tetapi gagal, lihat masalah yang ditemui di bawah)
- patch monyet ke rak, yang mengubah ip pengikat default
Tujuan sebenarnya di balik ini adalah saya ingin peningkatan lancar di antara tim kami, menghindari kesalahan bahwa orang harus terus-menerus memulai ulang server rel mereka karena bagian yang hilang -b 0.0.0.0
.
Saya mencoba port forwarding gelandangan, tetapi masih mendapatkan Connection Refused
ketika saya mengunjungi localhost:3000
di mesin host. Dua baris konfigurasi yang saya coba adalah:
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', host: 3000
Tidak menemukan instruksi yang relevan di dokumen resmi. Bantuan apa pun akan dihargai.
sumber
HOST=0.0.0.0
, dan server dev Rails akan secara otomatis menggunakan nilai ini.Jawaban:
Saya mengalami masalah yang sama di sini dan hari ini saya menemukan solusi yang lebih baik. Cukup tambahkan kode ini ke config / boot.rb Anda dan itu akan berfungsi dengan vagrant.
require 'rails/commands/server' module Rails class Server def default_options super.merge(Host: '0.0.0.0', Port: 3000) end end end
ps: Ini berdasarkan: jawaban ini
sumber
Anda dapat menggunakan mandor untuk menjalankan
Procfile
dengan perintah khusus Anda:# Procfile in Rails application root web: bundle exec rails s -b 0.0.0.0
Sekarang mulai aplikasi Rails Anda dengan:
foreman start
Hal yang baik tentang mandor adalah Anda dapat menambahkan aplikasi lain ke Procfile (seperti sidekiq, mailcatcher).
Hal buruk tentang mandor adalah Anda harus melatih tim Anda untuk berlari,
foreman start
bukanrails s
.sumber
foreman s
juga akan bekerja - mungkin transisi yang lebih mudah darirails s
.Bertemu masalah yang sama. Menemukan server blog Make Rails 4.2 mendengarkan semua antarmuka .
Tambahkan berikut ini ke config / boot.rb
require 'rails/commands/server' module Rails class Server alias :default_options_bk :default_options def default_options default_options_bk.merge!(Host: '0.0.0.0') end end end
sumber
Untuk Rails 5.1.7 dengan Puma 3.12.1 jawaban yang dipilih tidak berfungsi, tetapi saya menyelesaikannya dengan menambahkan yang berikut ini ke
config/puma.rb
file saya :set_default_host '0.0.0.0' # Note: Must come BEFORE defining the port port ENV.fetch('PORT') { 3000 }
Saya menentukan ini dengan memeriksa file dsl . Ini digunakan
instance_eval
pada file itu, jadi mungkin ada cara lain untuk melakukannya, tetapi ini tampaknya paling masuk akal bagi saya.sumber
Jika Anda meletakkan opsi default
config/boot.rb
maka semua atribut perintah untuk rake and rails gagal (contoh:rake -T
ataurails g model user
)! Jadi, tambahkan ini kebin/rails
baris setelahrequire_relative '../config/boot'
dan kode dijalankan hanya untuk perintah server rails:if ARGV.first == 's' || ARGV.first == 'server' require 'rails/commands/server' module Rails class Server def default_options super.merge(Host: '0.0.0.0', Port: 3000) end end end end
The
bin/rails
berkas loks seperti ini:#!/usr/bin/env ruby APP_PATH = File.expand_path('../../config/application', __FILE__) require_relative '../config/boot' # Set default host and port to rails server if ARGV.first == 's' || ARGV.first == 'server' require 'rails/commands/server' module Rails class Server def default_options super.merge(Host: '0.0.0.0', Port: 3000) end end end end require 'rails/commands'
sumber
Berikut solusi sederhana yang saya gunakan. Saya sudah menyukai / membutuhkan dotenv dan puma-heroku , jadi jika menggunakannya tidak berhasil untuk Anda, maka ini mungkin bukan untuk Anda.
/config/puma.rb
plugin :heroku
Gemfile
gem 'dotenv-rails', groups: [:development, :test]
.env
PORT=8080
Sekarang saya dapat memulai pengembangan dan produksi dengan
rails s
.sumber
Beralih ke Puma dan menentukan
port
dalamconfig/puma.rb
, misalnya:port ENV.fetch("PORT") { 3000 }
Rupanya itu akan mengikat 0.0.0.0 untuk port yang ditentukan: https://github.com/puma/puma/issues/896
sumber
Jika Anda menggunakan buruh pelabuhan atau alat lain untuk mengelola variabel lingkungan, Anda dapat menyetel
HOST
variabel lingkungan ke IP yang perlu Anda ikat.Contoh:
HOST=0.0.0.0
Tambahkan ke
docker.env
file jika Anda menggunakan Docker atau.env
jika Anda menggunakan mandor.sumber
Untuk Rails 5 dengan Puma jawaban yang dipilih tidak berfungsi. Anda mungkin mendapatkan kesalahan seperti itu:
cannot load such file -- rails/commands/server
Untuk solusi yang tepat tambahkan yang berikut ke
config/puma.rb
:bind 'tcp://0.0.0.0:3000'
sumber