需要重启 Puma 以反映视图的变化?

Posted

技术标签:

【中文标题】需要重启 Puma 以反映视图的变化?【英文标题】:Need to restart Puma to reflect changes in view? 【发布时间】:2015-11-06 06:42:16 【问题描述】:

我刚刚对我新部署的 Rails 4 应用程序进行了一些新的更改。更准确地说是视图文件中的一些更改。

令我沮丧的是,在推送更改后,网站仍然显示相同的旧视图。查了好久,终于明白解决问题的关键是:

sudo restart puma-manager

现在,这是正常的做法吗?每次推送更改时重新启动服务器?还是我对 Puma 的配置不当?

谁能告诉我是否可以做些什么来改善这种情况?

【问题讨论】:

是的,每次推送我还需要重启服务器才能看到变化。如果你使用 Capistrano,还有人写 puma restart task。 【参考方案1】:

Rails 中的自动更新代码在机架中间件 ActionDispatch::Reloader 下工作。

默认情况下,ActionDispatch::Reloader 包含在中间件中 仅在开发环境中堆栈。

当请求到达服务器时。中间件ActionDispatch::Reloader 启动,并执行插入的回调。

例如:

=> bundle exec rake middleware RAILS_ENV=development
use Rack::Sendfile
use ActionDispatch::Static
use Rack::Lock
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x00000004b662b0>
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use Rollbar::Middleware::Rails::RollbarMiddleware
use ActionDispatch::RemoteIp
use ActionDispatch::Reloader #< -- here reloader!
use ActionDispatch::Callbacks
use ActiveRecord::Migration::CheckPending
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use Rack::Head
use Rack::ConditionalGet
use Rack::ETag
use Warden::Manager
run MyApp::Application.routes

production 中没有ActionDispatch::Reloader

=> bundle exec rake middleware RAILS_ENV=production
use Rack::Sendfile
use ActionDispatch::Static
use Rack::Lock
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x00000004092e60>
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use Rollbar::Middleware::Rails::RollbarMiddleware
use ActionDispatch::RemoteIp
use ActionDispatch::Callbacks
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use Rack::Head
use Rack::ConditionalGet
use Rack::ETag
use Warden::Manager
run MyApp::Application.routes

【讨论】:

对不起,我没听懂你回答中的一半……我不熟悉“机架中间件”之类的术语。你能解释一下吗? 看好What is Rack middleware? Rails 使用机架堆栈构建。 Rails 只不过是几个机架而已。 好的,我想我现在已经明白为什么它可以正常工作了。那很有启发性。谢谢。但是有什么办法可以改变吗? 你能澄清一下改变这个吗?

以上是关于需要重启 Puma 以反映视图的变化?的主要内容,如果未能解决你的问题,请参考以下文章

当以编程方式完成时,视图不会反映任何变化

Capistrano在升级ruby版本和puma时重启错误版本的puma

为啥自定义指令不能立即反映其代码的变化

Django在运行时创建动态模型,需要重启服务器才能反映,为啥?

os时区更改tomcat需要重启

MySQL之视图