要使开发应用程序可在有防火墙的业务环境中使用,请考虑使用 heroku 工具,尤其是“foreman”。您可以将工头配置为使用更快的网络服务器(独角兽是一个不错的选择,IMO),在端口 3000 或 500 或其他端口上运行......但是工头将需要保持运行,直到您杀死它。当你被杀时,你不提供任何服务。而且...运行时,它使用Rails“开发”模式。有些事情你可能在开发模式下做,而你不会在生产中做 - 例如。可选地使用 gem “better_errors”,这可能会帮助您跟踪和修复问题,但也意味着您的任何用户群也可以深入研究代码,在低级别更改数据库等 - 如果它们触发错误。如果您正确管理 Gemfile,则生产模式将无法访问开发者工具。
就我个人而言,我通过在我的源代码存储库中创建一个“暂存”分支,让其他用户可以使用某个应用的测试版本。然后,我在配置为生产使用的服务器上的该暂存分支中运行代码,但使用暂存分支而不是主分支。这样,我就可以向感兴趣的用户演示应用更改,而不会影响实时服务器或共享潜在风险的开发服务。
最基本的步骤?请注意,以下命令中的单引号和双引号之间存在显着差异。如果在 Procfile 行上使用双引号,您将让服务器从端口 3000 开始固定。使用单引号,您可以设置环境参数来配置它所在的端口 - 在尝试使用相同的配置过程时很有用在开发、登台和生产中。
安装heroku工具带
将“gem 'unicorn'”添加到您的 Gemfile:
echo "" >> Gemfile
echo "gem 'unicorn'" >> Gemfile
为工头设置 Procfile:
echo 'web: unicorn -c config/unicorn.rb -p ${PORT:=3000}' > Procfile
并设置独角兽配置文件:
cat > config.unicorn.rb << HERE
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true
before_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
HERE
然后运行foreman start 以在端口 3000 上获得线程更高性能的开发 Web 服务器。
准备就绪后,创建一个暂存分支,并设置一个更完整的暂存服务器。
但真正的问题...为什么不在 Heroku 这样的服务上运行它呢?如果您有任何类型的用户注册/登录过程,您可以控制访问。 Heroku 会很高兴地为您提供开发、登台和生产服务器。将数据保持在 10MB (IIRC) 以下,您可以免费使用。数据(可能是为了遵守法规)是否必须保留在本地网络的防火墙内?