rails version 5.2
Run Code Online (Sandbox Code Playgroud)
我有一个场景,我需要使用亚马逊s3访问Rails Active Storage的公共URL来制作带Sidekiq后台作业的zip文件.
我很难获得实际的文件网址.我试过以下
rails_blob_url
Run Code Online (Sandbox Code Playgroud)
但它让我跟随
http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZUk9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--9598613be650942d1ee4382a44dad679a80d2d3b/sample.pdf
Run Code Online (Sandbox Code Playgroud)
如何通过sidekiq访问真实文件网址?
storage.yml
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
local:
service: Disk
root: <%= Rails.root.join("storage") %>
development:
service: S3
access_key_id: 'xxxxx'
secret_access_key: 'xxxxx'
region: 'xxxxx'
bucket: 'xxxxx'
Run Code Online (Sandbox Code Playgroud)
development.rb
config.active_storage.service = :development
Run Code Online (Sandbox Code Playgroud)
我可以在web界面上访问这些,但不能在sidekiq中访问
我正在尝试使用此命令打开凭据文件。
rails credentials:edit
Run Code Online (Sandbox Code Playgroud)
它返回:
没有 $EDITOR 来打开文件。像这样分配一个:
EDITOR="mate --wait" bin/rails 凭证:编辑
对于立即 fork 和退出的编辑器,传递一个等待标志很重要,否则凭据将立即保存而没有机会进行编辑。
所以我做了这个命令:
EDITOR="subl --w" bin/rails credentials:edit
Run Code Online (Sandbox Code Playgroud)
但是,终端会在不打开编辑器的情况下以“加密并保存的新凭据”作为响应。
我最近将我的项目升级到最新的Rails版本(5.2)以获得ActiveStorage- 一个处理附件上传到AWS S3,Google Cloud等云服务的库.
几乎一切都很好.我可以上传和附加图像
user.avatar.attach(params[:file])
Run Code Online (Sandbox Code Playgroud)
接收它
user.avatar.service_url
Run Code Online (Sandbox Code Playgroud)
但现在我想替换/更新用户的头像.我以为我可以跑
user.avatar.attach(params[:file])
Run Code Online (Sandbox Code Playgroud)
再次.但这会引发错误:
ActiveRecord::RecordNotSaved: Failed to remove the existing associated avatar_attachment. The record failed to save after its foreign key was set to nil.
Run Code Online (Sandbox Code Playgroud)
那是什么意思?如何更改用户头像?
activerecord ruby-on-rails ruby-on-rails-5 rails-activestorage
有没有办法自定义附件网址而不是
/rails/active_storage/representations/
/rails/active_storage/blobs/
Run Code Online (Sandbox Code Playgroud)
我们可以这样:
/custom_path/representations/
/custom_path/blobs/
Run Code Online (Sandbox Code Playgroud) 在铁轨测试中.我有一个只有activestorage的基本模型:
class User < ApplicationRecord
has_one_attached :avatar
end
Run Code Online (Sandbox Code Playgroud)
我正试图让它成为固定装置,但没有运气(我确实有一个图像):
# users.yml
one:
avatar: <%= File.open Rails.root.join('test', 'files', 'image.png').to_s %>
Run Code Online (Sandbox Code Playgroud)
如何通过灯具正确附加头像文件?
ActiveStorage充斥我的开发日志,所以我淹没在页面上的图像请求.有没有办法静音活动存储或至少减少日志条目,以便我可以再次使用我的日志?
例如,对于通过ActiveStorage访问的页面上的每个图像,我得到以下其中一个:
2018-09-03 11:07:42.181697 I [75455:70130232359340 log_subscriber.rb:12] (2.365ms) ActiveStorage::DiskController -- Completed #show -- {
:controller => "ActiveStorage::DiskController",
:action => "show",
:params => {
"content_type" => "image/jpeg",
"disposition" => "inline; filename=\"faded-flip.jpg\"; filename*=UTF-8''faded-flip.jpg",
"encoded_key" => "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJbk4yWVhKcFlXNTBjeTh6TnpRMVlqSmtZaTB3WlRCakxUUTVaRFV0WW1Ga01DMWxNRFl4TWpFd09Ua3dOMkl2TkdRME1qQTBNR1EzTjJaaE5UZ3pOVFU1WXpSbVpqaGlOVFpoWVdVd01ESmhabVJqWW1GaE5HTmxPRFV3WXpneU1UUmhPVEpsWlRVNVl6bGlPRGs0WVFZNkJrVlUiLCJleHAiOiIyMDE4LTA5LTAzVDEwOjEyOjMyLjUwN1oiLCJwdXIiOiJibG9iX2tleSJ9fQ==--b9eed7f4cf3d71fcb697429188e1a1a74ba88bec",
"filename" => "faded-flip"
},
:format => "JPEG",
:method => "GET",
:path => "/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJbk4yWVhKcFlXNTBjeTh6TnpRMVlqSmtZaTB3WlRCakxUUTVaRFV0WW1Ga01DMWxNRFl4TWpFd09Ua3dOMkl2TkdRME1qQTBNR1EzTjJaaE5UZ3pOVFU1WXpSbVpqaGlOVFpoWVdVd01ESmhabVJqWW1GaE5HTmxPRFV3WXpneU1UUmhPVEpsWlRVNVl6bGlPRGs0WVFZNkJrVlUiLCJleHAiOiIyMDE4LTA5LTAzVDEwOjEyOjMyLjUwN1oiLCJwdXIiOiJibG9iX2tleSJ9fQ==--b9eed7f4cf3d71fcb697429188e1a1a74ba88bec/faded-flip.jpg",
:status => 200,
:view_runtime => 0.69,
:db_runtime => 0.0,
:status_message => "OK"
}
127.0.0.1 - - [03/Sep/2018:11:07:41 BST] "GET /rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJbk4yWVhKcFlXNTBjeTh6TnpRMVlqSmtZaTB3WlRCakxUUTVaRFV0WW1Ga01DMWxNRFl4TWpFd09Ua3dOMkl2TkdRME1qQTBNR1EzTjJaaE5UZ3pOVFU1WXpSbVpqaGlOVFpoWVdVd01ESmhabVJqWW1GaE5HTmxPRFV3WXpneU1UUmhPVEpsWlRVNVl6bGlPRGs0WVFZNkJrVlUiLCJleHAiOiIyMDE4LTA5LTAzVDEwOjEyOjMyLjUwN1oiLCJwdXIiOiJibG9iX2tleSJ9fQ==--b9eed7f4cf3d71fcb697429188e1a1a74ba88bec/faded-flip.jpg?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22faded-flip.jpg%22%3B+filename%2A%3DUTF-8%27%27faded-flip.jpg HTTP/1.1" 200 21345
http://localhost:3000/users/password/new -> /rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJbk4yWVhKcFlXNTBjeTh6TnpRMVlqSmtZaTB3WlRCakxUUTVaRFV0WW1Ga01DMWxNRFl4TWpFd09Ua3dOMkl2TkdRME1qQTBNR1EzTjJaaE5UZ3pOVFU1WXpSbVpqaGlOVFpoWVdVd01ESmhabVJqWW1GaE5HTmxPRFV3WXpneU1UUmhPVEpsWlRVNVl6bGlPRGs0WVFZNkJrVlUiLCJleHAiOiIyMDE4LTA5LTAzVDEwOjEyOjMyLjUwN1oiLCJwdXIiOiJibG9iX2tleSJ9fQ==--b9eed7f4cf3d71fcb697429188e1a1a74ba88bec/faded-flip.jpg?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22faded-flip.jpg%22%3B+filename%2A%3DUTF-8%27%27faded-flip.jpg
2018-09-03 11:07:42.234412 D [75455:70130203086520 log_subscriber.rb:8] ActiveStorage::DiskController -- …Run Code Online (Sandbox Code Playgroud) 我的应用程序(本地)ActiveStorage::IntegrityError在尝试附加文件时引发错误。我怎样才能摆脱这个错误?
我只有一个has_one_attached,我不知道这个错误是如何妨碍的。
# model
has_one_attached :it_file
Tempfile.open do |temp_file|
# ...
it_file.attach(io: temp_file, filename: 'filename.csv', content_type: 'text/csv')
end
# storage.yml
local:
service: Disk
root: <%= Rails.root.join("storage") %>
Run Code Online (Sandbox Code Playgroud)
编辑:它可能与删除storage/目录有关(它发生在我删除之后),也可能是因为它发生在工作中(完整的错误是Error performing ActivityJob (Job ID: .. ) from Async( .. ) in .. ms: ActiveStorage::IntegrityError (ActiveStorage::IntegrityError)
这不会将文件添加到storage/文件夹,但当我尝试附加它们时,它会在其下生成文件夹。
我在使用ActiveStorage上传图像/ pdf时出现问题.图像似乎没有问题上传,但是当我尝试显示它们时它们会导致错误.
我的blog模特has_one_attached :image和has_one_attached :pdf.上传曾经工作(所以我知道我安装了ActiveStorage,我的亚马逊s3设置正确),但出了点问题.
唯一复杂的一点是我需要它才能工作,如果它有PDF或不(不是所有的博客都有一个PDF ...所有应该有一个图像).
我的blog#create方法是:
def create
@blog = Blog.new(blog_params)
@blog.user_id = current_user.id
if @blog.published
@blog.published_on = DateTime.current
end
respond_to do |format|
if @blog.save
if @blog.image.attached?
@blog.image.purge
end
@blog.image.attach(params[:image])
if @blog.pdf.attached?
@blog.pdf.purge
end
@blog.pdf.attach(params[:pdf])
format.html { redirect_to @blog, notice: 'Blog was successfully created.' }
format.json { render :show, status: :created, location: @blog }
else
format.html { render :new }
format.json { render json: @blog.errors, status: :unprocessable_entity }
end
end …Run Code Online (Sandbox Code Playgroud) 我有这个课程,我正在使用主动存储
class MaterialsUpload < ApplicationRecord
has_one_attached :csv_file
end
Run Code Online (Sandbox Code Playgroud)
这是附件
#<ActiveStorage::Attached::One:0x007ff1f0be9e90
@dependent=:purge_later,
@name="csv_file",
@record=
#<MaterialsUpload:0x007ff1f0c604f0
id: 3,
success: 0,
errors_list: [],
total: 0,
created_at: Mon, 12 Feb 2018 14:43:35 UTC +00:00,
updated_at: Mon, 12 Feb 2018 14:43:35 UTC +00:00>>
Run Code Online (Sandbox Code Playgroud)
有没有办法可以读取数据,所以我可以做这样的事情
string = materials_upload.csv_file.read
CSV.parse(csv_string, headers: true) do |row|
# do something
end
Run Code Online (Sandbox Code Playgroud) 一个问题Active Storage(刚刚更新到rails 5.2)试图打开附加文件,保存在blob上,重定向到root_path任何想法我怎样才能打开/下载它.
我在rails视图中的代码是:
<%= link_to(document.filename, rails_blob_path(document, disposition: "attachment")) %>
Run Code Online (Sandbox Code Playgroud)
TIA