Я использую paperclip, devise, aws и heroku, чтобы показывать свои фотографии в приложении Rails. Он работал хорошо, пока я не изменил мое приложение/активы/application.js и мои контроллеры/пользователи/sessions_controller.rbRails: ошибка синтаксиса с помощью paperclip и aws on heroku
Примечание: я не изменил вещь в моей конфигурации/сред/production.rb
Однако я получаю сообщение об ошибке синтаксиса, когда я использую консоль rak.
Running rails console on ⬢ immense-spire-90312... up, run.8450 (Free)
/app/vendor/bundle/ruby/2.2.0/gems/activesupport-5.0.0.1/lib/active_support/dependencies.rb:293:in `require': /app/config/environments/production.rb:88: syntax error, unexpected '\n', expecting => (SyntaxError)
/app/config/environments/production.rb:92: syntax error, unexpected ':', expecting keyword_end
storage: :s3,
^
В моей конфигурации/сред/production.rb
config.paperclip_defaults = {
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
Paperclip::Attachment.default_options[:s3_host_name] = 's3-eu-central-1.amazonaws.com'
# The syntax error seems to be here:
storage: :s3,
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION'),
}
}
Что я изменил:
В JavaScripts/application.js я поставил // = требуют начальной загрузки при jquery_ujs (сначала он был внизу)
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require turbolinks
//= require owl.carousel
//= require_tree .
И я создал sessions_controller в завещанию, так что, когда пользователь входит в систему, я хочу, чтобы изменить что-то в базе данных
class Users::SessionsController < Devise::SessionsController
def create
super do |user|
user.randomized_fakeposts.delete_all
# Note: A fakeposts consists of an image_url which is taken from aws.
Fakepost.all.each do |fp|
user.randomized_fakeposts.new(fakepost: fp)
end
user.save
end
end
end
Независимо от того, что вы помните изменения, фрагмент кода из вашего 'production.rb' не является действительным Ruby: вы не можете использовать' = 'внутри хэш-декларации, если оно не является частью строки или части оператор значения. – coreyward
@coreyward: Я чувствую себя такой глупой, вот и все (у Виджая было такое же решение, как и вы). Спасибо. Однако по-прежнему странно, что код работал раньше, так как я не касался 'production.rb'. Тем не менее, спасибо :). – OhDaeSu
Возможно, изменения в 'production.rb' были сделаны ранее, но несохранены (и/или не зарегистрированы). Это одна из причин, по которой я * всегда * просматриваю diff до того, как я его совершу, и дважды проверю с помощью git status, даже если это один символ, который был изменен. #protip – coreyward