有人经历过吗?我们将项目从Rails 5.2升级到Rails 6.0.0,此后,内存消耗猛增...在发行候选环境中,它可以正常工作,但是在生产中,容器因内存使用而死亡...实例我们在5.2中使用1GB RAM可以很好地完成工作,但是即使我们为它们提供4GB内存,我们测试Rails 6.0.0的实例也会立即死亡。
我们已经测试了https://github.com/schneems/derailed_benchmarks,但是要求的gem总数总共增加了10 MiB。
我们有一些繁琐的查询,但我们不知道为什么这会在Rails 6中而不是在Rails 5中发生。
已经cocoon gem在Rails 4和Rails 5应用程序中用于嵌套表单。目前,我正在将rails 5.2应用程序之一(正在使用cocoon gem)更新为rails 6。
由于Rails 6使用的是webpacker,所以我厌倦了application.js像以前版本的rails一样要求文件中包含茧形javascript 。
app / javascript / application.js
//= require cocoon
Run Code Online (Sandbox Code Playgroud)
但是不幸的是,事情似乎没有用。也尝试过导入,但是由于茧不能作为javascript软件包使用,因此它当然也无法正常工作。
任何解决方案或替代方案?
从控制台我无法执行任何涉及数据库的操作。我得到一个分段错误。
.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/pg-1.1.4/lib/pg.rb:56: [BUG] Segmentation fault at 0x0000000000000110
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18]
它实际上是可能需要数据库的任何操作,包括 MyModel.new。
-- Control frame information -----------------------------------------------
c:0071 p:---- s:0406 e:000405 CFUNC :initialize
c:0070 p:---- s:0403 e:000402 CFUNC :new
c:0069 p:0016 s:0398 e:000397 METHOD /Users/xxx/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/pg-1.1.4/lib/pg.rb:56
c:0068 p:0107 s:0393 e:000392 METHOD /Users/xxx/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/postgres
我已经卸载并重新安装了 pg gem。并重建了数据库。并重新启动 PostgreSQL。
我看到其他人在Puma下运行时报告问题,但我的配置在Puma下有效,在console下失败!
为清楚起见编辑:
是的,使用捆绑器。
使用相同的堆栈跟踪rails c或bundle exec rails c具有相同的效果(段错误)启动 rails 控制台。
Gemfile.lock 有 pg (1.1.4)
我重新捆绑,指定捆绑路径。堆栈跟踪现在具有该捆绑路径,因此我猜默认情况下捆绑程序使用的是 rbenv 路径。
我正在阅读使用 Rails 6进行敏捷 Web 开发这本书,我在“迭代”结束时完成了并且bin/rails test在固定装置的某个地方得到了一个可怕的长而丑陋的转储。(我对 Rails 并不陌生……只是想赶上 Rails 6 中的所有新玩具并刷新)。
我确保我的所有代码都与示例代码匹配,然后最终ps -ef | grep -i spring找到了三个进程——24 小时前的一个。我用 just 杀了他们,kill <pid>然后照做了bin/rails test,一切都很好。
我意识到“理论上”我不需要告诉spring重启,但显然有时你会这样做。那么,规定的重启方法是spring什么?
我正在编辑资源 - @article- 每当我提交它时,我都会收到以下错误:
JSON::ParserError in ArticlesController#update
783: unexpected token at '#<ImageUploader::UploadedFile:0x00007fb154adb508>'
Run Code Online (Sandbox Code Playgroud)
它突出显示了这一行:
if @article.update(article_params)
Run Code Online (Sandbox Code Playgroud)
这是我的Article#Update操作中的正常 Rails 样板代码:
def update
respond_to do |format|
if @article.update(article_params)
format.html { redirect_to @article, notice: 'Article was successfully updated.' }
format.json { render :show, status: :ok, location: @article }
else
format.html { render :edit }
format.json { render json: @article.errors, status: :unprocessable_entity }
end
end
end
Run Code Online (Sandbox Code Playgroud)
这是服务器日志的完整输出(包括参数):
Started PATCH "/articles/welcome-to-ftja" for ::1 at 2020-05-04 02:11:43 -0500
Processing by ArticlesController#update as HTML
Parameters: …Run Code Online (Sandbox Code Playgroud) 我目前正在按照升级指南将 Rails 5.2 应用程序升级到 Rails 6.0。
一切似乎都工作得很好,直到我的用户类之一(标签或艺术家)与链接模型交互时遇到错误。
当我尝试以艺术家或厂牌身份注册时,当我需要定义指向用户社交媒体或网站的链接时,我收到以下错误:
Completed 500 Internal Server Error in 139ms (ActiveRecord: 7.3ms | Allocations: 14518)
NoMethodError - undefined method `extensions' for #<Hash:0x000000000bdd4ec8>
Did you mean? extend:
app/controllers/label/personal_informations_controller.rb:8:in `edit'
Run Code Online (Sandbox Code Playgroud)
这是我的个人信息控制器:(错误位于第 8 行,我将对其进行标记,以便清楚地显示)
class Label::PersonalInformationsController < LabelController
layout "signup"
skip_before_action :ensure_approved
def edit
prepare_country_options
@label = current_label
@label.links.build(links_attributes) #***ERROR OCCURS HERE***#
end
def update
@label = current_label
if @label.update_attributes(label_params)
redirect_to edit_label_genres_path
else
update_error
end
end
private
def update_error
prepare_country_options
@label.links.build(links_attributes)
render :edit
end
def label_params
params.require(:label).permit(:logo, …Run Code Online (Sandbox Code Playgroud) 我知道它很简单,但是随着rails 6的更新。rails6中有新的语法来管理由webpacker维护的javascript资产。
//application.js
require("@rails/ujs") //.start()
require("turbolinks").start()
require("@rails/activestorage").start()
require('jquery').start()
require('jquery_ujs').start()
require('bootstrap-daterangepicker').start()
require("custom/custom").start()
require("bootstrap").start()
require("channels")
Run Code Online (Sandbox Code Playgroud)
我能够添加,custom/custom但引导程序和jquery无法正常工作我已经通过npm安装了jquery和引导程序
我正在使用ActionText编辑一个段落,并且该段落在本地完美运行,但是当我将其部署到Heroku时,页面的格式为rich_text_area,即使我遵循了rails指南,也会抛出一个错误,提示未定义的方法rich_text_area_tag。我以为我需要在生产中配置Active Storage,但事实并非如此。
这是我在Heroku的日志中得到的信息:
ActionView::Template::Error (undefined method 'rich_text_area_tag' for #<#<Class> Did you mean? rich_text_area)
<%= f.label :something, class:'label' %>
<%= f.rich_text_area :something %>
Run Code Online (Sandbox Code Playgroud) secret_key_base既然我们拥有每个环境的凭据,那么在 Rails 6上定义的正确方法是什么?
我的环境有这个变量,SECRET_KEY_BASE但 Rails 没有找到它。我尝试定义secret_key_base,config\credentials\production.yml.enc但它对Rails.application.credentials.secret_key_base
我知道config/secrets.yml有
staging:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
有效,但是,那是 Rails 6 的方式吗?
我们有办法禁用操作文本的附件吗?类似于下面的 has_rich_text :content,attachment: false
这样,我们就可以从数据库中删除 active_storage_blobs、active_storage_attachments 表。在这种情况下,只有 action_text_rich_texts 表才能满足目的。
rich-text-editor rails-activestorage ruby-on-rails-6 actiontext
ruby-on-rails-6 ×10
actiontext ×2
ruby ×2
cocoon-gem ×1
controller ×1
heroku ×1
javascript ×1
json ×1
model ×1
postgresql ×1
ruby-2.7 ×1
simple-form ×1
spring ×1
trix ×1
webpacker ×1