2017-01-02 7 views
0

Я использую 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 
+0

Независимо от того, что вы помните изменения, фрагмент кода из вашего 'production.rb' не является действительным Ruby: вы не можете использовать' = 'внутри хэш-декларации, если оно не является частью строки или части оператор значения. – coreyward

+0

@coreyward: Я чувствую себя такой глупой, вот и все (у Виджая было такое же решение, как и вы). Спасибо. Однако по-прежнему странно, что код работал раньше, так как я не касался 'production.rb'. Тем не менее, спасибо :). – OhDaeSu

+0

Возможно, изменения в 'production.rb' были сделаны ранее, но несохранены (и/или не зарегистрированы). Это одна из причин, по которой я * всегда * просматриваю diff до того, как я его совершу, и дважды проверю с помощью git status, даже если это один символ, который был изменен. #protip – coreyward

ответ

1

Я рассмотрел свой код и нашел это ошибка синтаксиса с кодом production.rb.

Вы используете хэш, но пропущенную запятую (,) в конце. поэтому, пожалуйста, замените свой код на следующие строки.

config.paperclip_defaults = { 
    :url => ':s3_domain_url', 
    :path => '/:class/:attachment/:id_partition/:style/:filename', 
    :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'), 
    } 
} 
+0

Вот и все, спасибо :). Однако мне все еще немного странно, что мой код работал раньше (клянусь, я не изменил 'production.rb', когда он работал). Тем не менее, он работает сейчас, поэтому спасибо :)! – OhDaeSu

+1

@OhDaeSu Добро пожаловать! –

Смежные вопросы